WITH distinct_dates AS (SELECT DISTINCT admission_date FROM admissions), grp AS (SELECT admission_date, DATE(admission_date, '-' || ROW_NUMBER() OVER (ORDER BY admission_date) || ' days') AS grp_key FROM distinct_dates) SELECT MIN(admission_date) AS island_start, MAX(admission_date) AS island_end, COUNT(*) AS days_in_island FROM grp GROUP BY grp_key ORDER BY island_start;
Write your query and click "Run Query" (Ctrl + Enter) to see results and testcase validation.