如何查找日期之间的状态

Kal*_*kov 2 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
Run Code Online (Sandbox Code Playgroud)

我的目标是当我宣布日期时,找到A号码的状态

例如:

Declare @Date varchar(25)='2017-01-10 12:40'
Run Code Online (Sandbox Code Playgroud)

结果:

Number  |Status     |Date 
------------------------------------
A       |Active     |2017-01-10 12:40
Run Code Online (Sandbox Code Playgroud)

因为2017-01-10 12:40是间2017-01-09 22:512017-01-29 22:51 则状态Active

但我不知道如何找到申报日期的状态

Gor*_*off 5

您可以通过执行以下操作找到单个"数字"的状态:

select top 1 t.*
from likethis t
where t.date <= @date
order by t.date desc;
Run Code Online (Sandbox Code Playgroud)

如果你想对所有"数字"执行此操作,那么你可以使用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;
Run Code Online (Sandbox Code Playgroud)