Без оконных функций нужно для каждого дня посчитать изменение выручки по сравнению с предыдущим днём. Таблица daily_revenue содержит date и revenue. Как это сделать?

AСоединить таблицу саму с собой по равенству дат: ON a.date = b.date и затем вычислить разницу
BИспользовать CROSS JOIN таблицы с собой и в WHERE оставить пары с минимальной разницей дат
CИспользовать UNION ALL текущего и сдвинутого запроса для формирования пар строк по дате
DСоединить таблицу с собой по условию ON b.date = a.date - INTERVAL '1 day' для получения предыдущего дня
Правильный ответ. Self-join со сдвигом: FROM daily_revenue a JOIN daily_revenue b ON b.date = a.date - INTERVAL '1 day' даёт пару текущего и предыдущего дня для вычисления разницы.

Разбор

До появления оконных функций соединение таблицы с собой было основным способом сравнить строку с предыдущей. Соединяем таблицу с собой: a — текущий день, b — предыдущий через условие b.date = a.date - INTERVAL '1 day'. Разница: a.revenue - b.revenue. Первый день потеряет пару — INNER JOIN его отбросит, LEFT JOIN сохранит с NULL. Современная альтернатива: LAG(revenue) OVER(ORDER BY date).

Можно заниматься бесплатно

Готовим вопросы…

Три вопроса по теме этой страницы, с объяснениями.

Продолжить в браузере

Ещё вопросы по теме «JOIN и операции множеств»