微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

选择哪个具有匹配的日期或最新日期记录

如何解决选择哪个具有匹配的日期或最新日期记录

这是两个表。

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 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?