Функции lag() over() и lead() over() — это две аналитические функции, связанные со смещениями. С помощью этих двух функций можно получить первые N строк данных (лаг) и последние N строк одного и того же поля. один запрос N строк данных (свинцов) используются как независимые столбцы, что упрощает фильтрацию данных. Эта операция может заменить самообъединение таблиц, а LAG и LEAD являются более эффективными.
over() означает, что данные, обрабатываемые функциями lag() и lead(), находятся в области действия over(), в котором можно использовать разделение по операторам (для группировки) и порядок по операторам (для сортировки). Разделение по порядку b означает группировку по полю a, а затем сортировку по полю b для запроса данных.
Например: поле Lead(field, num, defaultvalue) — это поле, в котором нужно искать, num — это данные в количестве строк, которые будут искаться позже, значение по умолчанию не имеет значения по умолчанию, которое соответствует условиям.
Синтаксис следующий:
lead(expression,offset,default) over(partition by ... order by ...)
lag(expression,offset,default) over(partition by ... order by ... )
Например, извлеките данные за предыдущую и следующую неделю следующим образом:
select year,week,sale,
lead(sale,1,NULL)
over(-продажа на предыдущей неделе
partition by product,country,region
order by year,week
) lead_week_sale,
lag(sale,1,NULL)
сверх(-распродажа на следующей неделе
partition by product,country,region
order by year,week
) lag_week_sale
from sales_fact a
where a.country='country1' and a.product='product1' and region='region1'
order by product,country,year,week
Подобные обычаи включают:
count() over(partition by ... order by ...): Найдите общее количество после группировки.
max() over(partition by ... order by ...): Найдите максимальное значение после группировки.
min() over(partition by ... order by ...): Найдите минимальное значение после группировки.
avg() over(partition by ... order by ...): Найдите среднее значение после группировки.
lag() over(partition by ... order by ...): Выньте первые n строк данных.
lead() over(partition by ... order by ...): n строк данных после извлечения.
ratio_to_report() over(partition by ... order by ...):Ratio_to_report() Числитель находится в круглых скобках, над(). Знаменатель указан в скобках.
percent_rank() over(partition by ... order by ...):
Ссылка: https://blog.csdn.net/hongyd/article/details/83056194. https://zhuanlan.zhihu.com/p/183800056 https://blog.csdn.net/weixin_43792309/article/details/108910620