SQL - 通过增加" priority"来过滤具有相同名称和顺序的记录。另一个领域

时间:2018-05-22 19:22:51

标签: sql

好的,所以我找不到编写问题标题的好方法,所以这是场景: 我有一个表,其中包含具有名称,有效日期和其他属性的记录。 我的表的唯一键是基于名称和有效日期。

例如,如果我有这些记录:

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。 (多数据库)

1 个答案:

答案 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

更改参数值以进行测试