sql - 在日期范围内查找匹配值并返回值
问题描述
我正在寻找一种解决方案,我希望找到在特定时间范围内有效的价格并将结果插入交易表中。价格表仅在价格更新时有一个日期戳,并且价格更改会创建一个具有新日期的新行。
我已将这两个表连接在一起,但我的尝试只会导致创建多个额外的行。
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
解决方案
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)
推荐阅读
- javascript - 从服务器端调用 passport.authenticate
- r - 如何在 Stargazer / R 中组合 dep var 列
- r - R:如何在列表中绘制 data.frames 的数据?
- ruby-on-rails - Rails ActiveAdmin 在 has_many 关系中显示图像
- azure-devops - 冲突的版本保留设置导致删除?
- javascript - 在 VeeValidate3 和 VueJS 中添加自定义错误消息
- python - 如何在表格的 td colspan 旁边刮一个 td
- c# - Windows 10 (1607) / Windows Server 2016 上的 ASP.NET Core ILogger 内存泄漏
- selenium - 选项 selenium 上的 NoneType
- pandas - 在用户输入有多少变量的情况下,我应该使用什么来在函数内部创建多个变量?