TGViewer
SQLite на практике SQLite на практике @sqliter · 2.25K subscribers
Post #102 2.99K
SQL-рецепт: Сравнение с соседями

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

Решение — использовать функцию lag() поверх SQL-окна.

Пример

Сравним расходы компании от месяца к месяцу в абсолютном выражении:

select
year, month,
expense,
expense - lag(expense) over w as diff
from expenses
window w as (
order by year, month
)
order by year, month;


year  mon exp  dif
2020 1 82
2020 2 75 -7
2020 3 104 29
2020 4 94 -10
2020 5 99 5
2020 6 105 6
2020 7 95 -10
2020 8 110 15
2020 9 104 -6


lag(value, offset) возвращает значение value из строки, отстоящей на offset строк назад от текущей.

По умолчанию offset равно 1, указывать его не обязательно.

Нюансы

— Еще есть функция lead(). Работает в точности как lag(), только смотрит вперед, а не назад.

— Если СУБД не поддерживает инструкцию window, можно встроить определение окна: lag(expense) over (order by ...)

→ Оконные функции SQL
  • 👍 17
More from @sqliter
  1. May 20, 2025fuzzy: Нечеткое сравнение строк в SQLite Расширение nalgeon/fuzzy помогает сравнивать стро…
  2. May 14, 2025fileio: Работа с файлами в SQLite Расширение nalgeon/fileio добавляет в SQLite возможность…
  3. May 10, 2025define: Пользовательские функции в SQLite Как известно, в SQLite нет хранимых процедур. Пр…
  4. May 7, 2025crypto: Хеши, кодирование и декодирование в SQLite Открываю новую серию заметок. В каждом…
  5. Aug 8, 2024Работа с датой и временем в SQLite В sqlite есть встроенные функции для работы с датами, н…
  6. May 8, 2024Современный SQLite: Вычисляемые столбцы Вычисляемые (generated) столбцы рассчитываются на…
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 →