Как в MySQL найти непрерывные последовательности?

Помогите с определением непрерывных последовательностей. Имеется таблица с датами и на каждую дату что то случалось или не случалось. Если что то случалось на протяжении какого то промежутка времени, то нужно указать дату начала и дату окончания. На скрине пример:

Пример


Ответы (1 шт):

Автор решения: Victor Ishkov

Если версия MySQL поддерживает оконные функции, то можно попробовать использовать их. Таблица названа q1261234, замените на свое.

SELECT
    y.id,
    MIN(y.date) d_start,
    MAX(y.date) d_end
FROM (
    SELECT
        x.id,
        x.date,
        SUM(x.flag) OVER (PARTITION BY x.id ORDER BY x.date) grp_flag
    FROM (
        SELECT
            *,
            CASE
                WHEN LAG(var) over (PARTITION BY id ORDER BY date) <> var THEN 1
                ELSE 0
            END flag
        FROM q1261234
    ) x
    WHERE var = 1
) y
GROUP BY y.id, grp_flag;
→ Ссылка