Sql 如何选择零值时间间隔
我需要选择没有(0)数据的时间间隔。如何在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
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累计到第一次数据累计(包括它)的时间间隔谢谢!这就是我要找的。谢谢!这就是我要找的。