簡體   English   中英

SQL查詢以獲取給定日期的產品值

[英]SQL Query to get the value of a product given a date

我有一個表格,它給出了特定日期#tableA 的產品費率。

create table #tableA
(
    Id int not null,
    ValueDate date,
    Price decimal(9,2)
)

insert into #tableA (Id, ValueDate, Price)
values 
    (1, '2020-08-01', 100),
    (1, '2020-08-05', 110),
    (1, '2020-08-07', 50)

我的另一個表有產品的 id 和日期。

create table #tableB
(
    Id int not null,
    Dates date
)

insert into #tableB (Id, Dates)
values
    (1, '2020-08-01'),
    (1, '2020-08-02'),
    (1, '2020-08-03'),
    (1, '2020-08-04'),
    (1, '2020-08-05'),
    (1, '2020-08-06'),
    (1, '2020-08-07'),
    (1, '2020-08-04')

我找不到一個有效的查詢,其中我的結果表給出了給定日期的產品費率。

我期待這個結果。

Id  Dates         ValueDate    Price 
-------------------------------------
1, '2020-08-01', '2020-08-01', 100
1, '2020-08-02', '2020-08-01', 100
1, '2020-08-03', '2020-08-01', 100
1, '2020-08-04', '2020-08-01', 100
1, '2020-08-05', '2020-08-05', 110
1, '2020-08-06', '2020-08-05', 110
1, '2020-08-07', '2020-08-07', 50

像這樣的東西:

SELECT DISTINCT B.[id]
               ,B.[Dates]
               ,DS.*
FROM #tableB B
CROSS APPLY
(
    SELECT TOP 1 *
    FROM #tableA A
    WHERE B.[Id] = A.[Id]
        AND B.[Dates] >= A.[ValueDate]
        AND A.[Price] IS NOT NULL
    ORDER BY A.[ValueDate] DESC
) DS;

或這個:

WITH DataSource AS
(
    SELECT DISTINCT B.[ID]
                   ,B.[Dates]        
                   ,A.[ValueDate]
                   ,A.[Price]
                   ,SUM(IIF(A.[ID] IS NOT NULL, 1, 0)) OVER (ORDER BY B.[Dates]) AS [GroupID]
    FROM #tableB B
    LEFT JOIN #tableA A
        ON B.[Id] = A.[Id]
        AND B.[Dates] = A.[ValueDate]
        AND A.[Price] IS NOT NULL
)
SELECT [ID]
      ,[Dates]
      ,MAX([ValueDate]) OVER (PARTITION BY [GroupID]) AS [ValueDate]
      ,MAX([Price]) OVER (PARTITION BY [GroupID]) AS [Price]
FROM DataSource;

在此處輸入圖片說明

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM