AdvancedWindow Functions
Find longest streak of consecutive sales days
The query
SQL
WITH daily AS (
SELECT DISTINCT order_date::DATE AS d
FROM orders
WHERE status = 'completed'
),
numbered AS (
SELECT
d,
d - MAKE_INTERVAL(days => ROW_NUMBER() OVER (ORDER BY d)::int) AS grp
FROM daily
),
streaks AS (
SELECT grp, MIN(d) AS streak_start, MAX(d) AS streak_end, COUNT(*) AS streak_length
FROM numbered
GROUP BY grp
)
SELECT streak_start, streak_end, streak_length
FROM streaks
ORDER BY streak_length DESC
LIMIT 1;Note
“Classic gaps-and-islands. Subtracting ROW_NUMBER from date creates equal group for consecutive dates.