355
355
CROSS JOIN
356
356
generate_series(
357
357
date_trunc(' minute' , was .session_started_at ),
358
- -- Subtract 1 microsecond to avoid creating an extra series.
358
+ -- Subtract 1 μs to avoid creating an extra series.
359
359
date_trunc(' minute' , was .session_ended_at - ' 1 microsecond' ::interval),
360
360
' 1 minute' ::interval
361
361
) AS s(minute_bucket)
@@ -389,14 +389,17 @@ WITH
389
389
ts AS (
390
390
SELECT
391
391
d::timestamptz AS from_,
392
- CASE
393
- WHEN (d::timestamptz + (@interval_days::int || ' day' )::interval) <= @end_time::timestamptz
394
- THEN (d::timestamptz + (@interval_days::int || ' day' )::interval)
395
- ELSE @end_time::timestamptz
396
- END AS to_
392
+ LEAST(
393
+ (d::timestamptz + (@interval_days::int || ' day' )::interval)::timestamptz ,
394
+ @end_time::timestamptz
395
+ )::timestamptz AS to_
397
396
FROM
398
- -- Subtract 1 microsecond from end_time to avoid including the next interval in the results.
399
- generate_series(@start_time::timestamptz , (@end_time::timestamptz ) - ' 1 microsecond' ::interval, (@interval_days::int || ' day' )::interval) AS d
397
+ generate_series(
398
+ @start_time::timestamptz ,
399
+ -- Subtract 1 μs to avoid creating an extra series.
400
+ (@end_time::timestamptz ) - ' 1 microsecond' ::interval,
401
+ (@interval_days::int || ' day' )::interval
402
+ ) AS d
400
403
)
401
404
402
405
SELECT
@@ -410,6 +413,7 @@ LEFT JOIN
410
413
template_usage_stats AS tus
411
414
ON
412
415
tus .start_time >= ts .from_
416
+ AND tus .start_time < ts .to_ -- End time exclusion criteria optimization for index.
413
417
AND tus .end_time <= ts .to_
414
418
AND CASE WHEN COALESCE(array_length(@template_ids::uuid[], 1 ), 0 ) > 0 THEN tus .template_id = ANY(@template_ids::uuid[]) ELSE TRUE END
415
419
GROUP BY
473
477
CROSS JOIN
474
478
generate_series(
475
479
date_trunc(' minute' , was .session_started_at ),
476
- -- Subtract 1 microsecond to avoid creating an extra series.
480
+ -- Subtract 1 μs to avoid creating an extra series.
477
481
date_trunc(' minute' , was .session_ended_at - ' 1 microsecond' ::interval),
478
482
' 1 minute' ::interval
479
483
) AS s(minute_bucket)
0 commit comments