Group by 15 minutes increments with a count,包括计数0

问题描述 投票:0回答:1

我有以下查询,它以 15 分钟的增量对我的数据进行分组,但它不包括在 15 分钟的增量中没有数据的增量。

当前查询:

SELECT 
    TO_CHAR(TRUNC(time_stamp)
        + FLOOR(TO_NUMBER(TO_CHAR(time_stamp, 'SSSSS'))/900)/96, 'YYYY-MM-DD HH24:MI:SS') time_start,
    COUNT (CUSTOMERS) Customer_Calls
FROM CUSTOMERS
WHERE time_stamp >= to_date('2023-03-23 00:00:00', 'YYYY-MM-DD HH24:MI:SS')
GROUP BY
    TRUNC(time_stamp) + FLOOR(TO_NUMBER(TO_CHAR(time_stamp, 'SSSSS'))/900)/96;

电流输出:

2023-03-23 00:30:00 1
2023-03-23 00:45:00 1
2023-03-23 01:45:00 1
2023-03-23 03:45:00 1

我希望每次增加 15 分钟。例如:

要求的输出

2023-03-23 00:00:00 0
2023-03-23 00:15:00 0
2023-03-23 00:30:00 1
2023-03-23 00:45:00 1
2023-03-23 01:00:00 0
2023-03-23 01:15:00 0
2023-03-23 01:30:00 0
2023-03-23 01:45:00 1
and so on. 

任何帮助将不胜感激。谢谢!

sql oracle datetime recursive-query date-arithmetic
1个回答
0
投票

并不是所有的时隙都在表中开始,所以我们需要先生成它们;为此,我们可以使用递归。然后,我们带着

left join
.

的客户表

假设你想要从昨天午夜到现在的所有时间段:

with slots (ts) as (
    select trunc(sysdate) - interval '1' day ts from dual
    union all
    select ts + interval '15' minute from slots where ts < sysdate
)
select s.ts, count(c.time_stamp) as customer_call
from slots
left join customers c 
    on c.time_stamp  >= s.ts
    and c.time_stamp <  s.ts + interval '15' minute
group by s.ts
© www.soinside.com 2019 - 2024. All rights reserved.