W
When I need to show data as chart with data grouped to time buckets (interval between 1 to 60 minutes) I use this script. So in the example below I select number of rows in logs table (record_) grouped to 15 minutes intervals (bucket_id). With joining x table I achieve zero blanks.
You can find more about WITH functions on this excellent blog by Tim Hall.
WITH
FUNCTION get_time_bucket (
in_date DATE,
in_interval NUMBER
)
RETURN NUMBER AS
BEGIN
RETURN FLOOR((in_date - TRUNC(in_date)) * 1440 / in_interval) + 1;
END;
--
x AS (
SELECT
LEVEL AS bucket_id
--CAST(TRUNC(SYSDATE) + NUMTODSINTERVAL((LEVEL - 1) * 15, 'MINUTE') AS DATE) AS start_at,
--CAST(TRUNC(SYSDATE) + NUMTODSINTERVAL( LEVEL * 15, 'MINUTE') AS DATE) AS end_at
FROM DUAL
CONNECT BY LEVEL <= (1440 / 15)
),
l AS (
SELECT
get_time_bucket(l.created_at, 15) AS bucket_id,
COUNT(*) AS records_
FROM logs l
--WHERE l.created_at >= TRUNC(SYSDATE)
GROUP BY get_time_bucket(l.created_at, 15)
)
SELECT
x.bucket_id,
l.records_
FROM x
LEFT JOIN l
ON l.bucket_id = x.bucket_id
ORDER BY 1;
/
Comments
Post a Comment