CORE/views/sessions_chart.sql
2022-01-09 21:47:33 +01:00

47 lines
1.8 KiB
MySQL

CREATE OR REPLACE VIEW sessions_chart AS
WITH x AS (
SELECT
app.get_app_id() AS app_id,
app.get_item('$USER_ID') AS user_id,
app.get_date_item('G_TODAY') AS today,
10 AS buckets
FROM users u
WHERE u.user_id = app.get_user_id()
),
z AS (
SELECT
x.app_id,
x.user_id,
x.today,
x.buckets,
--
LEVEL AS bucket_id,
TRUNC(SYSDATE) + NUMTODSINTERVAL((LEVEL - 1) * x.buckets, 'MINUTE') AS start_at,
TRUNC(SYSDATE) + NUMTODSINTERVAL( LEVEL * x.buckets, 'MINUTE') AS end_at
FROM x
CONNECT BY LEVEL <= (1440 / x.buckets)
)
SELECT
z.bucket_id,
TO_CHAR(z.start_at, 'HH24:MI') AS chart_label,
NULLIF(COUNT(DISTINCT l.session_id), 0) AS count_sessions,
NULLIF(COUNT(DISTINCT l.user_id), 0) AS count_users,
NULLIF(COUNT(DISTINCT l.page_id), 0) AS count_pages,
NULLIF(SUM(CASE WHEN l.flag = 'P' THEN 1 ELSE 0 END), 0) AS count_requests, -- app.flag_request
NULLIF(SUM(CASE WHEN o.flag = 'P' THEN 1 ELSE 0 END), 0) AS count_others
FROM z
LEFT JOIN logs l
ON l.created_at >= z.today
AND l.created_at < z.today + 1
AND (l.user_id = z.user_id OR z.user_id IS NULL)
AND l.app_id = z.app_id
AND z.bucket_id = app.get_time_bucket(l.created_at, z.buckets)
LEFT JOIN logs o
ON o.created_at >= z.today
AND o.created_at < z.today + 1
AND o.app_id != z.app_id
AND z.bucket_id = app.get_time_bucket(o.created_at, z.buckets)
AND o.user_id = z.user_id
GROUP BY z.bucket_id, TO_CHAR(z.start_at, 'HH24:MI');