2014-09-29 76 views
1

我有一個包含datetime和標誌,像這樣的表:從SQL Server選擇週期

2014-11-06 | True 
2014-11-07 | True 
2014-11-08 | True 
2014-11-09 | False 
2014-11-10 | False 
2014-11-11 | True 
2014-11-12 | True 
2014-11-13 | False 
2014-11-14 | True 
2014-11-15 | False 

我需要一個SQL查詢,返回最小和最大日期的真正的每個時期,這樣的幫助:

2014-11-06 | 2014-11-08 
2014-11-11 | 2014-11-12 
2014-11-14 | 2014-11-14 

請幫忙。它可以是LinqToSql查詢或T-SQL。謝謝

回答

3

連續的「真」週期有一個很好的屬性。如果您從日期中減去數字的遞增順序,則組中的所有內容都將具有相同的日期。你可以應用這個邏輯:

select min(dt), max(dt) 
from (select dt, 
      (dt - row_number() over (order by dt)) as grp 
     from table t 
     where flag = true 
    ) t 
group by grp; 
0

我喜歡下面的方法,但如果你有一個缺少日期在你的數據集,那麼它將無法正常工作。 我試過了,可能對有這樣的數據集的人有用。

Select Min(dt), Max(dt) 
from (Select dt, r_num, 
      (r_num - row_number() over(order by r_num)) as grp 
     From (select dt,flag, 
        row_number() over(Order by dt) r_num 
       From table t) x 
     Where flag = 'true' 
    ) t 
group by grp