Sql 如何选择零值时间间隔

Sql 如何选择零值时间间隔,sql,datetime,join,group-by,intervals,Sql,Datetime,Join,Group By,Intervals,我需要选择没有(0)数据的时间间隔。如何在SQL中实现这一点 例如: Time Data 10:00 0 10:15 0 10:30 1 10:45 0 11:00 12 11:15 0 11:30 0 11:45 0 12:00 7 结果: 10:00 - 10:30 10:45 - 11:00 11:15 - 12:00 您需要识别组,然后根据组进行聚合 一种简单的方法是计算每个值上或之后的非零值数量。这带来了结束时间: select min(time), max(time) from

我需要选择没有(0)数据的时间间隔。如何在SQL中实现这一点

例如:

Time Data
10:00 0
10:15 0
10:30 1
10:45 0
11:00 12
11:15 0
11:30 0
11:45 0
12:00 7
结果:

10:00 - 10:30
10:45 - 11:00
11:15 - 12:00

您需要识别组,然后根据组进行聚合

一种简单的方法是计算每个值上或之后的非零值数量。这带来了结束时间:

select min(time), max(time)
from (select t.*,
             sum(case when data > 0 then 1 else 0 end) over (order by time desc) as grp
      from t
     ) t
group by grp
having min(data) = 0
order by min(time);
这是一个SQL小提琴


注意:这使用了大多数数据库支持的标准SQL的窗口/分析函数。

您需要识别组,然后根据组进行聚合

一种简单的方法是计算每个值上或之后的非零值数量。这带来了结束时间:

select min(time), max(time)
from (select t.*,
             sum(case when data > 0 then 1 else 0 end) over (order by time desc) as grp
      from t
     ) t
group by grp
having min(data) = 0
order by min(time);
这是一个SQL小提琴

注意:这使用的窗口/分析函数是大多数数据库支持的标准SQL。

大多数DBMS支持窗口聚合:

大多数DBMS支持窗口聚合:


您的DBMS是什么?预期结果中列出的所有三个间隔都包括
0
。也许您的意思是其他的,例如由
1
分隔的间隔?我的DBMS是MS SQL,我需要从第一次0累计到第一次数据累计(包括它)的时间间隔。您的DBMS是什么?预期结果中列出的所有三个间隔都包括
0
。也许你指的是其他东西,例如由
1
分隔的间隔?我的DBMS是MS SQL,我需要从第一次0累计到第一次数据累计(包括它)的时间间隔谢谢!这就是我要找的。谢谢!这就是我要找的。