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;
Tested against PostgreSQL 16

Note

Classic gaps-and-islands. Subtracting ROW_NUMBER from date creates equal group for consecutive dates.

Tables referenced