Функція SQL LAG(). це віконна функція, яка надає доступ до рядка за вказаним фізичним зсувом, який стоїть перед поточним рядком .
Функція LAG у SQL Server звик порівняти значення поточного рядка зі значеннями попереднього рядка.
що таке сплячий режим в java
Синтаксис
The Синтаксис функції LAG це:
.LAG (скалярний вираз [, зміщення [, за замовчуванням ]]) OVER ( [ partition_by_clause ] order_by_clause )
Де :
- скалярний_вираз – Значення, яке буде повернуто на основі вказаного зсуву.
- зміщення – Кількість рядків назад від поточного рядка, з якого потрібно отримати значення. Якщо не вказано, за умовчанням дорівнює 1.
- за замовчуванням – за замовчуванням — це значення, яке повертається, якщо зміщення виходить за межі розділу. Якщо значення за замовчуванням не вказано, повертається NULL.
- partition_by_clause: Необов'язкове речення, яке розділяє набір результатів на розділи. Функція LAG() застосовується до кожного розділу окремо.
- order_by_clause: Порядок рядків у кожній секції. Це обов’язково і має бути зазначено.
Приклад функції SQL LAG().
Давайте розглянемо деякі приклади функції SQL LAG і зрозуміємо, як використовувати функцію LAG у SQL Server.
Приклад 1
SELECT Organisation, [Year], Revenue, LAG (Revenue, 1, 0) OVER ( PARTITION BY Organisation ORDER BY [Year]) AS PrevYearRevenue FROM Org ORDER BY Organisation, [Year];>
Вихід:
| організація | рік | Дохід | PrevYearRevenue |
|---|---|---|---|
| Новини ABCD | 2013 рік | 440000 | 0 |
| Новини ABCD | 2014 рік | 480000 | 440000 |
| Новини ABCD | 2015 рік | 490000 | 480000 |
| Новини ABCD | 2016 рік | 500000 | 490000 |
| Новини ABCD | 2017 рік | 520000 | 500000 |
| Новини ABCD | 2018 рік | 525000 | 520000 |
| Новини ABCD | 2019 рік | 540000 | 525000 |
| Новини ABCD | 2020 рік | 550000 | 540000 |
| Новини Z | 2016 рік | 720000 | 0 |
| Новини Z | 2017 рік | 750000 | 720000 |
| Новини Z | 2018 рік | 780000 | 750000 |
| Новини Z | 2019 рік | 880000 | 780000 |
| Новини Z | 2020 рік | 910000 | 880000 |
У наведеному вище прикладі ми маємо 2 канали телевізійних новин, чий дохід за поточний і попередній роки представлено в одному рядку за допомогою функції LAG(). Як ви бачите, найперший запис для кожного каналу телевізійних новин не має доходів за попередній рік, тому він показує значення за замовчуванням 0. Ця функція може бути дуже корисною для отримання даних для звітів BI, коли ви хочете порівняти значення у послідовні періоди, напр. Рік за роком або квартал за кварталом або щоденні порівняння.
Приклад 2
SELECT Z.*, (Z.Revenue - z.PrevYearRevenue) as YearonYearGrowth FROM (SELECT Organisation, [Year], Revenue, LAG (Revenue, 1) OVER ( PARTITION BY Organisation ORDER BY [Year] ) AS PrevYearRevenue FROM Org) Z ORDER BY Organisation, [Year];>
Вихід:
мій фліксер
| організація | рік | Дохід | PrevYearRevenue | Річний ріст |
|---|---|---|---|---|
| Новини ABCD | 2013 рік | 440000 | НУЛЬ | НУЛЬ |
| Новини ABCD | 2014 рік | 480000 | 440000 | 40000 |
| Новини ABCD | 2015 рік | 490000 | 480000 | 10000 |
| Новини ABCD | 2016 рік | 500000 | 490000 | 10000 |
| Новини ABCD | 2017 рік | 520000 | 500000 | 20000 |
| Новини ABCD | 2018 рік | 525000 | 520000 | 5000 |
| Новини ABCD | 2019 рік | 540000 | 525000 | 15000 |
| Новини ABCD | 2020 рік | 550000 | 540000 | 10000 |
| Новини Z | 2016 рік | 720000 | НУЛЬ | НУЛЬ |
| Новини Z | 2017 рік | 750000 | 720000 | 30000 |
| Новини Z | 2018 рік | 780000 | 750000 | 30000 |
| Новини Z | 2019 рік | 880000 | 780000 | 100000 |
| Новини Z | 2020 рік | 910000 | 880000 | 30000 |
У наведеному вище прикладі ми можемо аналогічно обчислити річне зростання для каналу телевізійних новин. Крім того, одна річ, яку слід зауважити в цьому прикладі, полягає в тому, що ми не надали жодного параметра за замовчуванням для LAG(), і, отже, функція LAG() повертає NULL, якщо немає попередніх значень. Функцію LAG() можна реалізувати на рівні бази даних, а рішення BI Reporting, такі як Power BI і Tableau, можуть уникнути використання громіздких заходів на рівні звітності.
Важливі моменти про функцію SQL LAG().
- Функція SQL LAG() — це віконна функція, яка дозволяє користувачам отримувати доступ до даних із попередніх рядків у наборі даних.
- Це дозволяє користувачам порівнювати значення поточного рядка зі значеннями з попередніх рядків, особливо тих, що стосуються часу або певних стовпців.
- Функція LAG() корисна для аналізу змін із плином часу, таких як дані фондового ринку, щоденні тенденції та зміни в кількох стовпцях.