[英]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.