[英]Find Row with closest date for each item in list in SQL Server
親愛的,不幸的是,我無法在這篇文章中找到解決我的問題的解決方案。
我有一個表,它存儲每個 ID 的價格並附加一個日期。 當價格更新時,會生成一個新條目,因此這個表包含每個 ID 的多個歷史價格。 現在,我想為 Id 列表中的每個項目查找與給定日期最接近的較小日期的價格。
該表如下所示:
| ID | Price | Date |
|----|-------|------------|
| 1 | 5 | 2022-06-01 |
| 2 | 10 | 2022-06-01 |
| 1 | 4 | 2022-04-01 |
.....
我嘗試過這樣的事情,但這不起作用:
DECLARE @get_Date VARCHAR(100)
SET @get_Date = '2022-06-01 00:00:00.000'
SELECT
ID
,Date
,Price
FROM table
WHERE ID IN ('1','2')
AND Date < CONVERT(DATETIME,@get_Date)
ORDER BY Date,ID DESC;
這給了我一些 output,但我只想要每個 ID 一個結果?
任何提示將不勝感激。
我們可以在這里使用DATEDIFF
和ROW_NUMBER
:
WITH cte AS (
SELECT *, ROW_NUMBER() OVER (
PARTITION BY ID
ORDER BY DATEDIFF(day, Date, '20220601')
) rn
FROM yourTable
WHERE Date < '20220601'
)
SELECT ID, Price, Date
FROM cte
WHERE rn = 1
ORDER BY ID;
這里的想法是找到每個ID
的日期,其天數相對於目標日期最小。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.