Zapytanie grupujące sąsiednie rekordy

0

Cześć,
szukam prostego rozwiązania na poniższy problem. Mam takie dane:

Id | Guid | Before | After
---------------- | ----------------
1 | A | 0 | 1
2 | A | 1 | 3
3 | B | 3 | 4
4 | A | 4 | 7
5 | B | 7 | 9
6 | B | 9| 14

Chcę napisać zapytanie, które zgrupuje sąsiednie rekordy o tym samym Guid. Oczekiwany wynik wyglądałby tak:

Guid | Before | After
---------------- | -------------------
A | 0 | 3
B | 3 | 4
A | 4 | 7
B | 7 | 14

Być może takie przekształcenie ma jakąś nazwę, ale jej nie znam, więc nie bardzo wiem pod jakim hasłem szukać czegoś w google.
Korzystam z PostgreSQL.

1

Sum jako funkcja okna

0

Dzięki za sugestię. Udało mi się skleić teraz działające zapytanie. Zastanawiam się teraz czy zbytnio nie przekombinowałem i czy nie dałoby się tego prościej zrobić? Tak wygląda obecny kod.

SELECT
	t1.guid,
    MIN(t1.before),
    MAX(t1.after)
FROM
(
    SELECT
    	t1.id,
        t1.guid,
        t1.before,
        t1.after,
        SUM(t1.newgroup) OVER (ORDER BY t1.id) AS grouptoken
    FROM
        (
            SELECT
                t1.id,
                t1.guid, 
                t1.before, 
                t1.after,
                (
                    CASE
                        WHEN LAG(t1.guid) OVER (ORDER BY t1.id) = t1.guid THEN NULL
                        ELSE 1
                    END
                ) as newgroup
            FROM 
                public.test AS t1
        ) AS t1
) AS t1
GROUP BY 
	t1.guid, 
    t1.grouptoken
ORDER BY
	MIN(t1.id);
   

1 użytkowników online, w tym zalogowanych: 0, gości: 1