好的,所以我找不到编写问题标题的好方法,所以这是场景: 我有一个表,其中包含具有名称,有效日期和其他属性的记录。 我的表的唯一键是基于名称和有效日期。
例如,如果我有这些记录:
id 1, NAME_A , 2018-01-01
id 2, NAME_A , 2018-02-01
id 3, NAME_A , 2018-03-01
我要求" NAME_A",2018-01-15,我应该检索id 1,因为它是"存在的唯一有效性"那个时候。
如果我要求" NAME_A",2018-02-02,那么它将是id 2,因为它是最新的有效性。
因此,每当我需要一个有效性时,我会过滤所有有效日期小于或等于我想要的日期的记录,按日期排序,并获得第一个最佳记录。
问题是当我想要检索大量记录时。让我们说我想要所有有效的记录,无论名称是什么(我可能还想要额外的过滤器。)
这种情况可能吗?
示例:
id, name, date, another field
id 1, NAME_A , 2018-01-01, A
id 2, NAME_A , 2018-02-01, B
id 3, NAME_A , 2018-03-01, C
所以,
find(2018-02-01, "A")
应为null。find(2018-02-01, "B")
应为id 2。find(2018-03-01, "A")
应为null。find(2018-03-01, "B")
应为null。
find(2018-03-01," C")应为id 3。它应该适用于Oracle,H2和Postgres。 (多数据库)
答案 0 :(得分:0)
假设你的原始数据在表#temp中,你可以运行:
declare @date datetime='2018-03-01', @value varchar(max)='C'
select top 1 id from #temp where anotherfield=@value and date>=@date order by
date desc
更改参数值以进行测试