簡體   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