从SQL Server选择周期
问题描述:
我有一个包含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。谢谢
答
连续的“真”周期有一个很好的属性。如果您从日期中减去数字的递增顺序,则组中的所有内容都将具有相同的日期。你可以应用这个逻辑:
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;
答
我喜欢下面的方法,但如果你有一个缺少日期在你的数据集,那么它将无法正常工作。 我试过了,可能对有这样的数据集的人有用。
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