如何解决选择哪个具有匹配的日期或最新日期记录
这是两个表。
ItemInfo
Id Description
1 First Item
2 Second Item
ItemInfoHistory
Id ItemInfoId Price StartDate EndDate
1 1 45 2020-09-01 2020-09-15
2 2 55 2020-09-26 null
3 1 50 2020-09-16 null
这是SQL查询。
SELECT i.Id,Price,StartDate,EndDate
FROM Itemsinfo i
LEFT JOIN ItemInfoHistory ih ON i.id= ih.ItemsMasterId AND CONVERT(DATE,GETDATE()) >= StartDate AND ( CONVERT(DATE,GETDATE()) <= EndDate OR EndDate IS NULL)
在9/20上运行查询时,会给出以下结果
Id Price StartDate EndDate
1 50 2020-09-16 NULL
2 NULL NULL NULL
对于第二项,我想从历史记录表中获取最新记录,如下所示。
Id Price StartDate EndDate
1 50 2020-09-16 NULL
2 55 2020-09-26 NULL
谢谢。
解决方法
最有效的方法可能是两次联接。假设“最新”记录具有NULL
的{{1}}值,则:
EndDate
实际上,中间联接不需要检查SELECT i.Id,COALESCE(ih.Price,ih_last.Price) as Price,COALESCE(ih.StartDate,ih_last.StartDate) as StartDate,COALESCE(ih.EndDate,ih_last.EndDate) as EndDate
FROM Itemsinfo i LEFT JOIN
ItemInfoHistory ih
ON i.id = ih.ItemsMasterId AND
CONVERT(DATE,GETDATE()) >= StartDate AND
(CONVERT(DATE,GETDATE()) <= EndDate OR EndDate IS NULL) LEFT JOIN
ItemInfoHistory ih_last
ON i.id = ih_last.ItemsMasterId AND
ih_last.EndDate IS NULL;
,因此可以将其删除。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。