Как вернуть значение из предыдущей строки без функции lag? SQL
Есть одна таблица с данными
2023-11-24 19:15:00 ERROR01 3976
2023-11-24 19:30:00 ERROR01 3980
2023-11-24 19:45:00 ERROR01 3985
2023-11-24 20:00:00 ERROR01 3990
Нужно получить следующее
2023-11-24 19:15:00 ERROR01 3976 0
2023-11-24 19:30:00 ERROR01 3980 4
2023-11-24 19:45:00 ERROR01 3985 5
2023-11-24 20:00:00 ERROR01 3990 5
То есть необходимо получить разницу с предыдущей строкой
Функции LAG нет использую druid sql , как реализовать подобное без данной функции?
Ответы (1 шт):
Автор решения: Akina
→ Ссылка
В общем виде:
SELECT t1.*, t3.data_column AS lead_for_data_column
FROM table t1
LEFT JOIN table t3 ON t1.partition_by_expression = t3.partition_by_expression
AND t1.order_by_expression < t3.order_by_expression
AND NOT EXISTS ( SELECT NULL
FROM table t2
WHERE t1.partition_by_expression = t2.partition_by_expression
AND t1.order_by_expression < t2.order_by_expression
AND t2.order_by_expression < t3.order_by_expression
);
Переводя на русский: выбрать такие две записи, что между ними нет третьей.
Шаблон выше - для эмуляции LEAD(). Для эмуляции LAG() - понять смысл происходящего и перевернуть, сделав базой более позднюю по критерию сортировки копию.