TGViewer
Data Science. SQL hub Data Science. SQL hub @sqlhub · 36K subscribers
Post #2522 603
🧩 SQL-задача: почему `LAG()` здесь подведёт?

Есть интервалы работы сервера. Время указано в минутах:


id | start_at | end_at
---+----------+-------
1 | 1 | 10
2 | 2 | 3
3 | 9 | 12
4 | 15 | 16
5 | 16 | 20


Объедините пересекающиеся и соприкасающиеся интервалы. Вложенные интервалы тоже учитываются.

Ожидаемый результат:


start_at | end_at
---------+-------
1 | 12
15 | 20


Попробуйте решить до просмотра ответа 👇

Решение для PostgreSQL:


WITH bounds AS (
SELECT *,
MAX(end_at) OVER (
ORDER BY start_at, end_at, id
ROWS BETWEEN UNBOUNDED PRECEDING
AND 1 PRECEDING
) AS prev_max
FROM intervals
),
marked AS (
SELECT *,
CASE WHEN prev_max IS NULL
OR start_at > prev_max
THEN 1 ELSE 0 END AS new_group
FROM bounds
),
grouped AS (
SELECT *,
SUM(new_group) OVER (
ORDER BY start_at, end_at, id
ROWS UNBOUNDED PRECEDING
) AS grp
FROM marked
)
SELECT MIN(start_at) AS start_at,
MAX(end_at) AS end_at
FROM grouped
GROUP BY grp
ORDER BY start_at;


Подвох: LAG(end_at) для интервала [9,12] вернёт 3 и ошибочно начнёт новую группу. Но более ранний интервал [1,10] всё ещё перекрывает его.

Нужен максимальный конец среди всех предыдущих строк, а не только конец соседней.
  • 👍 3
  • ❤ 2
More from @sqlhub
  1. Oct 8, 2026🧮 Математика для ИИ на русском: от школьной базы до трансформеров и диффузии Бесплатный к…
  2. Oct 8, 2026ИИ-агент отвечает настолько точно, насколько готовы ваши данные. Как понять, что они готов…
  3. Oct 7, 2026🌍 SQL-задача: ближайшие точки на замкнутой карте Карта 100 × 100: противоположные края со…
  4. Oct 7, 2026ИИ-агент, который только отвечает на вопросы, — это уже прошлый этап. Следующий шаг — науч…
  5. Oct 6, 2026⚡️ SQL с подвохом: NULL в пустом списке Что выведет PostgreSQL? SELECT NULL IN (SELECT 1 W…
  6. Oct 3, 2026DOOM запустили внутри SQL-базы. Каждый кадр теперь результат запроса 🤯 Лукас Фогель собра…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →