如何查找日期之间的状态

时间:2017-02-28 14:55:06

标签: sql sql-server datetime

我有这样的表:

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:512017-01-29 22:51之间 状态为Active

但我不知道如何找到宣告日期的状态

2 个答案:

答案 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;状态及其日期。