我有这样的表:
Number |Status |Start_Date
------------------------------------
A |Active |2016-11-29 22:51
A |blocked |2016-12-20 22:51
A |Active |2017-01-09 22:51
A |blocked |2017-01-29 22:51
我的目标是在申报日期时查找A
号码
例如:
Declare @Date varchar(25)='2017-01-10 12:40'
结果:
Number |Status |Date
------------------------------------
A |Active |2017-01-10 12:40
因为2017-01-10 12:40
介于2017-01-09 22:51
和2017-01-29 22:51
之间
状态为Active
但我不知道如何找到宣告日期的状态
答案 0 :(得分:5)
您可以通过执行以下操作找到单个“号码”的状态:
select top 1 t.*
from likethis t
where t.date <= @date
order by t.date desc;
如果您想对所有“数字”执行此操作,则可以使用row_number()
:
select t.*
from (select t.*,
row_number() over (partition by t.number order by t.date desc) as seqnum
from likethis t
where t.date <= @date
) t
where seqnum = 1;
答案 1 :(得分:1)
您想要选择上一个:
select top 1 * from table
where Date <= @Date
and Number = 'A'
order by Date desc
然后,这将为您提供一个“活跃”的活动。或者&#39;被阻止&#39;状态及其日期。