[英]How to get distinct closest date in SQL Server?
我不知道如何格式化?!但我相信它很容易理解。 我有下表,我們稱之為“銷售”
|Item| |Price| |PriceDate|
ItemA 801.36 09/23/2011
ItemA 800.64 09/23/2011
ItemA 803.55 09/22/2011
ItemB 4701.36 09/22/2011
ItemB 1101.36 09/22/2011
ItemB 4801.36 09/20/2011
ItemB 401.36 09/22/2011
ItemC 9601.36 09/21/2011
ItemC 201.36 09/19/2011
ItemC 301.36 09/17/2011
我得到了一個日期,我需要檢索最接近日期的記錄,並且只有那些,例如,如果 09/24/2011 是輸入,則輸出應該只是項目 A 的第 23 條記錄,第 22 條為 itemB 和 21st 為 itemC。
使用 SQL Server 2012。
DECLARE @theTable TABLE (Item VARCHAR(10), price DECIMAL(10,2), priceDate DATE)
INSERT @theTable ( Item, price, priceDate )
VALUES
('ItemA',801.36,'2011-09-23'),
('ItemA',800.64,'2011-09-23'),
('ItemA',803.55,'2011-09-22'),
('ItemB',4701.36,'2011-09-22'),
('ItemB',1101.36,'2011-09-22'),
('ItemB',4801.36,'2011-09-20'),
('ItemB',401.36,'2011-09-22'),
('ItemC',9601.36,'2011-09-21'),
('ItemC',201.36,'2011-09-19'),
('ItemC',301.36,'2011-09-17')
DECLARE @inputDate DATE
SET @inputDate = '2011-09-24'
SELECT X.Item, X.price, X.priceDate FROM (
SELECT TT.Item, TT.price, TT.priceDate,
RANK() OVER (PARTITION BY [Item]
ORDER BY ABS(DATEDIFF(DAY, @inputDate, TT.priceDate))) AS RN
FROM @theTable TT
) AS X
WHERE RN = 1
(10 row(s) affected) Item price priceDate ---------- --------------------------------------- ---------- ItemA 801.36 2011-09-23 ItemA 800.64 2011-09-23 ItemB 4701.36 2011-09-22 ItemB 1101.36 2011-09-22 ItemB 401.36 2011-09-22 ItemC 9601.36 2011-09-21
我有同樣的問題,但我發現我可以通過更簡單的方式在前端解決它
/*back end*/
/*(DistinctItem) select distinct Item from sales*/
/*(saleRecords) select * from sales order by PriceDate desc*/
/*front end*/
for(var j = 0; j < DistinctItem.length;j++){
for(var i = 0; i < saleRecords.length;i++){
if(DistinctItem[j].Item==saleRecords[i].Item){
if(anyDate>saleRecords[i].PriceDate){
use saleRecords[i];
break;
}
}
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.