LAG (оконная)
Синтаксис
LAG( value [ , offset [ , default ] ] )
LAG( value [ , offset [ , default ] ]
[ TOTAL | WITHIN ... | AMONG ... ]
[ ORDER BY ... ]
[ BEFORE FILTER BY ... ]
)
Подробнее:
Описание
Важно
Сортировка осуществляется на основе полей, перечисленных в области сортировки в чарте и в ORDER BY. При этом сначала берутся поля из ORDER BY.
Возвращает значение value из строки со смещением offset относительно текущей в рамках заданного окна:
- положительное значение
offsetделает смещение назад; - отрицательное значение
offsetделает смещение вперед.
По умолчанию offset равно 1.
Если значение отсутствует (offset ссылается на строку до первой или после последней), то возвращается значение default в качестве результата. Если default не задано, то используется NULL.
См. также AGO в качестве неоконной альтернативы.
Типы аргументов:
value—Любойoffset—Целое числоdefault—Любой
Возвращаемый тип: Совпадает с типом аргументов (value)
Примечание
Значения аргументов (offset, default) должны быть константами.
Примеры
Пример с группировкой
Исходные данные
| Date | City | Category | Orders | Profit |
|---|---|---|---|---|
'2019-03-01' |
'London' |
'Office Supplies' |
8 |
120.80 |
'2019-03-04' |
'London' |
'Office Supplies' |
2 |
100.00 |
'2019-03-05' |
'London' |
'Furniture' |
1 |
750.00 |
'2019-03-02' |
'Moscow' |
'Furniture' |
2 |
1250.50 |
'2019-03-03' |
'Moscow' |
'Office Supplies' |
4 |
85.00 |
'2019-03-01' |
'San Francisco' |
'Office Supplies' |
23 |
723.00 |
'2019-03-01' |
'San Francisco' |
'Furniture' |
1 |
1000.00 |
'2019-03-03' |
'San Francisco' |
'Furniture' |
4 |
4000.00 |
'2019-03-02' |
'Detroit' |
'Furniture' |
5 |
3700.00 |
'2019-03-04' |
'Detroit' |
'Office Supplies' |
25 |
1200.00 |
'2019-03-04' |
'Detroit' |
'Furniture' |
2 |
3500.00 |
Группировка по [City], [Category].
Сортировка по [City], [Category].
Формулы:
- City:
[City]; - Category:
[Category]; - Order Sum:
SUM([Orders]); - LAG TOTAL:
LAG(SUM([Orders]) TOTAL); - LAG WITHIN:
LAG(SUM([Orders]) WITHIN [City]); - LAG AMONG:
LAG(SUM([Orders]) AMONG [City]).
Результат
| City | Category | Order Sum | LAG TOTAL | LAG WITHIN | LAG AMONG |
|---|---|---|---|---|---|
'Detroit' |
'Furniture' |
7 |
NULL |
NULL |
NULL |
'Detroit' |
'Office Supplies' |
25 |
7 |
7 |
NULL |
'London' |
'Furniture' |
1 |
25 |
NULL |
7 |
'London' |
'Office Supplies' |
10 |
1 |
1 |
25 |
'Moscow' |
'Furniture' |
2 |
10 |
NULL |
1 |
'Moscow' |
'Office Supplies' |
4 |
2 |
2 |
10 |
'San Francisco' |
'Furniture' |
5 |
4 |
NULL |
2 |
'San Francisco' |
'Office Supplies' |
23 |
5 |
5 |
4 |
Пример опциональным аргументом
Исходные данные
| Date | City | Category | Orders | Profit |
|---|---|---|---|---|
'2019-03-01' |
'London' |
'Office Supplies' |
8 |
120.80 |
'2019-03-04' |
'London' |
'Office Supplies' |
2 |
100.00 |
'2019-03-05' |
'London' |
'Furniture' |
1 |
750.00 |
'2019-03-02' |
'Moscow' |
'Furniture' |
2 |
1250.50 |
'2019-03-03' |
'Moscow' |
'Office Supplies' |
4 |
85.00 |
'2019-03-01' |
'San Francisco' |
'Office Supplies' |
23 |
723.00 |
'2019-03-01' |
'San Francisco' |
'Furniture' |
1 |
1000.00 |
'2019-03-03' |
'San Francisco' |
'Furniture' |
4 |
4000.00 |
'2019-03-02' |
'Detroit' |
'Furniture' |
5 |
3700.00 |
'2019-03-04' |
'Detroit' |
'Office Supplies' |
25 |
1200.00 |
'2019-03-04' |
'Detroit' |
'Furniture' |
2 |
3500.00 |
Группировка по [City].
Сортировка по [City].
Формулы:
- City:
[City]; - Order Sum:
SUM([Orders]); - LAG 1:
LAG(SUM([Orders]), 1); - LAG 2:
LAG(SUM([Orders]), -2).
Результат
| City | Order Sum | LAG 1 | LAG 2 |
|---|---|---|---|
'Detroit' |
32 |
NULL |
6 |
'London' |
11 |
32 |
28 |
'Moscow' |
6 |
11 |
NULL |
'San Francisco' |
28 |
6 |
NULL |
Пример с ORDER BY
Исходные данные
| Date | City | Category | Orders | Profit |
|---|---|---|---|---|
'2019-03-01' |
'London' |
'Office Supplies' |
8 |
120.80 |
'2019-03-04' |
'London' |
'Office Supplies' |
2 |
100.00 |
'2019-03-05' |
'London' |
'Furniture' |
1 |
750.00 |
'2019-03-02' |
'Moscow' |
'Furniture' |
2 |
1250.50 |
'2019-03-03' |
'Moscow' |
'Office Supplies' |
4 |
85.00 |
'2019-03-01' |
'San Francisco' |
'Office Supplies' |
23 |
723.00 |
'2019-03-01' |
'San Francisco' |
'Furniture' |
1 |
1000.00 |
'2019-03-03' |
'San Francisco' |
'Furniture' |
4 |
4000.00 |
'2019-03-02' |
'Detroit' |
'Furniture' |
5 |
3700.00 |
'2019-03-04' |
'Detroit' |
'Office Supplies' |
25 |
1200.00 |
'2019-03-04' |
'Detroit' |
'Furniture' |
2 |
3500.00 |
Группировка по [City].
Сортировка по [City].
Формулы:
- City:
[City]; - Order Sum:
SUM([Orders]); - LAG ORDER BY City:
LAG(SUM([Orders]) ORDER BY [City] DESC); - LAG ORDER BY Order Sum:
LAG(SUM([Orders]) ORDER BY [Order Sum]).
Результат
| City | Order Sum | LAG ORDER BY City | LAG ORDER BY Order Sum |
|---|---|---|---|
'Detroit' |
32 |
11 |
28 |
'London' |
11 |
6 |
6 |
'Moscow' |
6 |
28 |
NULL |
'San Francisco' |
28 |
NULL |
11 |
Поддержка источников данных
ClickHouse 21.8, Файлы, Google Sheets, Microsoft SQL Server 2017 (14.0), MySQL 5.7, Oracle Database 12c (12.1), PostgreSQL 9.3, Яндекс Документы.