首页 > 解决方案 > 在日期范围内查找匹配值并返回值

问题描述

我正在寻找一种解决方案,我希望找到在特定时间范围内有效的价格并将结果插入交易表中。价格表仅在价格更新时有一个日期戳,并且价格更改会创建一个具有新日期的新行。

我已将这两个表连接在一起,但我的尝试只会导致创建多个额外的行。

 SELECT t.ID
,t.Date
,t.ArtNo
,t.SellPrice
,p.Price

FROM TRANS t

LEFT JOIN Price p ON p.ArtNo = t.ArtNo AND p.Date <=t.Date

期望的结果:

ID  Date                ArtNo   SellPrice  Price
1   17/08/2016 00:00:00 A1010   30         21.8
2   02/04/2017 00:00:00 A1010   31         21.8
3   01/03/2018 00:00:00 A1010   31         22.35
4   01/11/2016 00:00:00 B2000   5          4.1
5   30/05/2017 00:00:00 B2000   5          4.17
6   29/10/2017 00:00:00 B2000   5          4.17

SQL小提琴

标签: sqlsql-servertsql

解决方案


 SELECT 
          t.ID
        , t.Date
        , t.ArtNo
        , t.SellPrice
        , pr.Price

FROM TRANS t
OUTER APPLY ( SELECT TOP (1) p.Price
              FROM Price p 
              WHERE p.ArtNo = t.ArtNo 
                AND p.Date <=t.Date
              ORDER BY p.Date DESC
            ) pr(Price) 

推荐阅读