按15分钟间隔的累积总和组-Oracle SQL
我想以15分钟为间隔得到累积和组。 如: 表格名称:myTable 结果:按15分钟间隔的累积总和组-Oracle SQL,sql,oracle,group-by,cumulative-sum,Sql,Oracle,Group By,Cumulative Sum,我想以15分钟为间隔得到累积和组。 如: 表格名称:myTable 结果: start_Time faults ============================================ 06/07/19 23:15 0 06/07/19 23:30 3 06/07/19 23:45 5 06/07/19 00:00 6
start_Time faults
============================================
06/07/19 23:15 0
06/07/19 23:30 3
06/07/19 23:45 5
06/07/19 00:00 6
07/07/19 00:15 8
07/07/19 00:30 8
08/07/19 00:45 8
08/07/19 01:00 8
谢谢我想你想要:
select trunc(start_time, 'hh') + (floor(extract(minute from start_time) / 15) * 15) * interval '1' minute as dte,
sum(count(*)) over (order by min(start_time))
from t
group by trunc(start_time, 'hh') + (floor(extract(minute from start_time) / 15) * 15) * interval '1' minute
order by dte;
是一把小提琴。我想你想要:
select trunc(start_time, 'hh') + (floor(extract(minute from start_time) / 15) * 15) * interval '1' minute as dte,
sum(count(*)) over (order by min(start_time))
from t
group by trunc(start_time, 'hh') + (floor(extract(minute from start_time) / 15) * 15) * interval '1' minute
order by dte;
是一个数据字典。此查询提供了现有季度的累计金额: 如果您想要更宽的日期范围,请使用connect by query生成该范围,并使用lag with ignore nulls与上面的join with生成该范围,如下所示:
with
flts as (
select date '1900-01-01' + tm / 24 / 4 tm, sum(sum(faults)) over (order by tm) faults
from (select floor((start_time - date '1900-01-01') * 24 * 4) tm, faults from mytable)
group by tm),
quarters as (
select to_date('2019-07-06 23:00', 'yyyy-mm-dd hh24:mi') + level * interval '15' minute tm
from dual connect by level <= 10 )
select to_char(tm, 'yyyy-mm-dd hh24:mi') tm,
nvl(faults, lag(faults, 1, 0) ignore nulls over (order by tm))
from quarters left join flts using (tm)
此查询提供了现有季度的累计金额: 如果您想要更宽的日期范围,请使用connect by query生成该范围,并使用lag with ignore nulls与上面的join with生成该范围,如下所示:
with
flts as (
select date '1900-01-01' + tm / 24 / 4 tm, sum(sum(faults)) over (order by tm) faults
from (select floor((start_time - date '1900-01-01') * 24 * 4) tm, faults from mytable)
group by tm),
quarters as (
select to_date('2019-07-06 23:00', 'yyyy-mm-dd hh24:mi') + level * interval '15' minute tm
from dual connect by level <= 10 )
select to_char(tm, 'yyyy-mm-dd hh24:mi') tm,
nvl(faults, lag(faults, 1, 0) ignore nulls over (order by tm))
from quarters left join flts using (tm)
您可以使用group by将日期截断为15分钟,然后使用分析函数计算累积和,如下所示:
Select
start_time
+ 15/1440
- mod((start_time - trunc(start_time)) * 1440, 15)/1440,
sum(count(1)) over (order by min(start_time))
from your_table
Group by start_time
+ 15/1440
- mod((start_time - trunc(start_time)) * 1440, 15)/1440
这与戈登的答案相同,但使用的是算术
干杯 您可以使用group by将日期截断为15分钟,然后使用分析函数计算累积和,如下所示:
Select
start_time
+ 15/1440
- mod((start_time - trunc(start_time)) * 1440, 15)/1440,
sum(count(1)) over (order by min(start_time))
from your_table
Group by start_time
+ 15/1440
- mod((start_time - trunc(start_time)) * 1440, 15)/1440
这与戈登的答案相同,但使用的是算术
干杯 您的数据从23:30传播到00:25,但您的结果从23:15传播到01:00。您如何定义结果集的范围?paolo ricardos,您可以发布具有匹配源和预期结果的示例数据的任何更改?您的数据从23:30扩展到00:25,但您的结果从23:15扩展到01:00。您如何定义结果集的范围?paolo ricardos,您可以发布具有匹配源和预期结果的示例数据的任何更改?在这两个位置不应该是“*间隔”1分钟?现在,分钟移动到秒+1无论如何。@Poundstibbons。非常感谢。这一点你当然是对的。两个地方的间隔时间不应该都是1分钟吗?现在,分钟移动到秒+1无论如何。@Poundstibbons。非常感谢。你当然是对的。