我有以下查询,它以 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.
任何帮助将不胜感激。谢谢!
并不是所有的时隙都在表中开始,所以我们需要先生成它们;为此,我们可以使用递归。然后,我们带着
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