By using db<>fiddle, you agree to license everything you submit by Creative Commons CC0.
Help with an interesting Postgres question: Why isn't an Index Only Scan used on a partition accessed via the parent table?.
CREATE TABLE mytable (id, col) AS
SELECT 1, 0 UNION ALL
SELECT 2, 0 UNION ALL
SELECT 3, 0 UNION ALL
SELECT 4, 1 UNION ALL
SELECT 5, 1 UNION ALL
SELECT 6, 1 UNION ALL
SELECT 7, 0 UNION ALL
SELECT 8, 0 UNION ALL
SELECT 9, 1 UNION ALL
SELECT 10, 0;
SELECT 10
SELECT id, col,
SUM(has_changed) OVER (ORDER BY id) AS grp
FROM (
SELECT t.*,
CASE LAG(col) OVER (ORDER BY id) WHEN col THEN 0 ELSE 1 END AS has_changed
FROM mytable t
) t
id | col | grp |
---|---|---|
1 | 0 | 1 |
2 | 0 | 1 |
3 | 0 | 1 |
4 | 1 | 2 |
5 | 1 | 2 |
6 | 1 | 2 |
7 | 0 | 3 |
8 | 0 | 3 |
9 | 1 | 4 |
10 | 0 | 5 |
SELECT 10