繁体   English   中英

查找 SQL 服务器列表中每个项目的最接近日期的行

[英]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 一个结果?

任何提示将不胜感激。

我们可以在这里使用DATEDIFFROW_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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM