fix: add last rigth value to series and refactor general stats
This commit is contained in:
parent
d453616641
commit
2e3402cb1c
@ -400,18 +400,15 @@ FROM
|
|||||||
-- name: GeneralStatistics :many
|
-- name: GeneralStatistics :many
|
||||||
WITH TimeBucket AS (
|
WITH TimeBucket AS (
|
||||||
SELECT
|
SELECT
|
||||||
CASE
|
date_trunc('hour', timestamp_bucket)::TIMESTAMP AS time_interval_start,
|
||||||
WHEN EXTRACT(epoch FROM $2::timestamp) - EXTRACT(epoch FROM $1::timestamp) > 172800 THEN date_trunc('day', timestamp_bucket)
|
COALESCE(LEAD(
|
||||||
ELSE date_trunc('hour', timestamp_bucket)
|
date_trunc('hour', timestamp_bucket)::TIMESTAMP
|
||||||
END::TIMESTAMP AS time_interval_start,
|
) OVER (ORDER BY timestamp_bucket), NOW()) AS time_interval_end
|
||||||
LEAD(
|
|
||||||
CASE
|
|
||||||
WHEN EXTRACT(epoch FROM $2::timestamp) - EXTRACT(epoch FROM $1::timestamp) > 172800 THEN date_trunc('day', timestamp_bucket)
|
|
||||||
ELSE date_trunc('hour', timestamp_bucket)
|
|
||||||
END::TIMESTAMP
|
|
||||||
) OVER (ORDER BY timestamp_bucket) AS time_interval_end
|
|
||||||
FROM
|
FROM
|
||||||
generate_series($1::timestamp with time zone, $2::timestamp with time zone, '1 hour'::interval) AS timestamp_bucket
|
generate_series(TO_TIMESTAMP($1), TO_TIMESTAMP($2), CASE
|
||||||
|
WHEN EXTRACT(epoch FROM TO_TIMESTAMP($2)) - EXTRACT(epoch FROM TO_TIMESTAMP($1)) > 172800 THEN '1 day'::interval
|
||||||
|
ELSE '1 hour'::interval
|
||||||
|
END) AS timestamp_bucket
|
||||||
),
|
),
|
||||||
OpenStats AS (
|
OpenStats AS (
|
||||||
SELECT
|
SELECT
|
||||||
@ -428,8 +425,8 @@ WITH TimeBucket AS (
|
|||||||
WHERE
|
WHERE
|
||||||
answer.quiz_id = $3
|
answer.quiz_id = $3
|
||||||
AND start = TRUE
|
AND start = TRUE
|
||||||
AND created_at >= $1::timestamp
|
AND created_at >= TO_TIMESTAMP($1)
|
||||||
AND created_at <= $2::timestamp
|
AND created_at <= TO_TIMESTAMP($2)
|
||||||
GROUP BY
|
GROUP BY
|
||||||
session
|
session
|
||||||
) AS first_starts
|
) AS first_starts
|
||||||
@ -453,8 +450,8 @@ WITH TimeBucket AS (
|
|||||||
WHERE
|
WHERE
|
||||||
answer.quiz_id = $3
|
answer.quiz_id = $3
|
||||||
AND result = TRUE
|
AND result = TRUE
|
||||||
AND created_at >= $1::timestamp
|
AND created_at >= TO_TIMESTAMP($1)
|
||||||
AND created_at <= $2::timestamp
|
AND created_at <= TO_TIMESTAMP($2)
|
||||||
GROUP BY
|
GROUP BY
|
||||||
session
|
session
|
||||||
) AS first_results
|
) AS first_results
|
||||||
@ -467,7 +464,7 @@ WITH TimeBucket AS (
|
|||||||
SELECT
|
SELECT
|
||||||
tb.time_interval_start,
|
tb.time_interval_start,
|
||||||
tb.time_interval_end,
|
tb.time_interval_end,
|
||||||
AVG(EXTRACT(epoch FROM (a.created_at - b.created_at))) AS avg_time
|
AVG(EXTRACT(epoch FROM (a.created_at)) - EXTRACT(epoch FROM (b.created_at))) AS avg_time
|
||||||
FROM
|
FROM
|
||||||
answer a
|
answer a
|
||||||
JOIN answer b ON a.session = b.session
|
JOIN answer b ON a.session = b.session
|
||||||
@ -478,10 +475,10 @@ WITH TimeBucket AS (
|
|||||||
AND a.result = TRUE
|
AND a.result = TRUE
|
||||||
AND b.start = TRUE
|
AND b.start = TRUE
|
||||||
AND b.quiz_id = $3
|
AND b.quiz_id = $3
|
||||||
AND a.created_at >= $1::timestamp
|
AND a.created_at >= TO_TIMESTAMP($1)
|
||||||
AND a.created_at <= $2::timestamp
|
AND a.created_at <= TO_TIMESTAMP($2)
|
||||||
AND b.created_at >= $1::timestamp
|
AND b.created_at >= TO_TIMESTAMP($1)
|
||||||
AND b.created_at <= $2::timestamp
|
AND b.created_at <= TO_TIMESTAMP($2)
|
||||||
GROUP BY
|
GROUP BY
|
||||||
tb.time_interval_start, tb.time_interval_end
|
tb.time_interval_start, tb.time_interval_end
|
||||||
)
|
)
|
||||||
@ -490,7 +487,7 @@ SELECT
|
|||||||
COALESCE(os.open_count, 0) AS open_count,
|
COALESCE(os.open_count, 0) AS open_count,
|
||||||
COALESCE(rs.true_result_count, 0) AS true_result_count,
|
COALESCE(rs.true_result_count, 0) AS true_result_count,
|
||||||
CASE
|
CASE
|
||||||
WHEN COALESCE(os.open_count, 0) > 0 THEN COALESCE(rs.true_result_count, 0) / COALESCE(os.open_count, 0)
|
WHEN COALESCE(os.open_count, 0) > 0 THEN COALESCE(rs.true_result_count, 0)::float / COALESCE(os.open_count, 0)::float
|
||||||
ELSE 0
|
ELSE 0
|
||||||
END AS conversion,
|
END AS conversion,
|
||||||
COALESCE(at.avg_time, 0) AS avg_time
|
COALESCE(at.avg_time, 0) AS avg_time
|
||||||
|
Loading…
Reference in New Issue
Block a user