2017-02-28 55 views
2

我有臺這樣的之間的狀態:如何找到日期

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:402017-01-09 22:512017-01-29 22:51 之間則狀態Active

但我不知道如何找到申報日期狀態

回答

5

您可以通過執行找到一個單一的「號碼」的狀態:

select top 1 t.* 
from likethis t 
where t.date <= @date 
order by t.date desc; 

如果你想爲所有的 「號碼」 S做到這一點,那麼你可以使用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

你需要選擇前一個:

select top 1 * from table 
where Date <= @Date 
and Number = 'A' 
order by Date desc 

這則要麼給你一個「有效」或「已屏蔽」狀態和它的日期。