La función SQL LAG() es una función de ventana que proporciona acceso a una fila en un desplazamiento físico específico que viene antes de la fila actual .
Función LAG en SQL Server se usa para compare los valores de la fila actual con los valores de la fila anterior.
Sintaxis
El Sintaxis de la función LAG es:
.LAG (expresión_escalar [, desplazamiento [, predeterminado]]) OVER ([partición_por_cláusula] orden_por_cláusula)
Dónde :
- expresión_escalar – El valor que se devolverá en función del desplazamiento especificado.
- compensar - El número de filas posteriores a la fila actual de las que se obtiene un valor. Si no se especifica, el valor predeterminado es 1.
- por defecto - El valor predeterminado es el valor que se devolverá si el desplazamiento va más allá del alcance de la partición. Si no se especifica un valor predeterminado, se devuelve NULL.
- partición_por_cláusula: Una cláusula opcional que divide el conjunto de resultados en particiones. La función LAG() se aplica a cada partición por separado.
- orden_por_cláusula: El orden de las filas dentro de cada partición. Esto es obligatorio y debe especificarse.
Ejemplo de función SQL LAG()
Veamos algunos ejemplos de la función LAG de SQL y comprendamos cómo usar la función LAG en SQL Server.
Ejemplo 1
SELECT Organisation, [Year], Revenue, LAG (Revenue, 1, 0) OVER ( PARTITION BY Organisation ORDER BY [Year]) AS PrevYearRevenue FROM Org ORDER BY Organisation, [Year];>
Producción:
| Organización | Año | Ganancia | AnteriorAñoIngresos |
|---|---|---|---|
| ABCD Noticias | 2013 | 440000 | 0 |
| ABCD Noticias | 2014 | 480000 | 440000 |
| ABCD Noticias | 2015 | 490000 | 480000 |
| ABCD Noticias | 2016 | 500000 | 490000 |
| ABCD Noticias | 2017 | 520000 | 500000 |
| ABCD Noticias | 2018 | 525000 | 520000 |
| ABCD Noticias | 2019 | 540000 | 525000 |
| ABCD Noticias | 2020 | 550000 | 540000 |
| Noticias Z | 2016 | 720000 | 0 |
| Noticias Z | 2017 | 750000 | 720000 |
| Noticias Z | 2018 | 780000 | 750000 |
| Noticias Z | 2019 | 880000 | 780000 |
| Noticias Z | 2020 | 910000 | 880000 |
En el ejemplo anterior, tenemos 2 canales de noticias de televisión cuyos ingresos del año actual y anterior se presentan en la misma fila usando la función LAG(). Como puede ver, el primer registro de cada uno de los canales de noticias de TV no tiene ingresos del año anterior, por lo que muestra el valor predeterminado de 0. Esta función puede ser muy útil para generar datos para informes de BI cuando desee comparar valores. en períodos consecutivos, por ej. Comparaciones año tras año o trimestre tras trimestre o diarias.
Ejemplo 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];>
Producción:
| Organización | Año | Ganancia | AnteriorAñoIngresos | Año tras añoCrecimiento |
|---|---|---|---|---|
| ABCD Noticias | 2013 | 440000 | NULO | NULO |
| ABCD Noticias | 2014 | 480000 | 440000 | 40000 |
| ABCD Noticias | 2015 | 490000 | 480000 | 10000 |
| ABCD Noticias | 2016 | 500000 | 490000 | 10000 |
| ABCD Noticias | 2017 | 520000 | 500000 | 20000 |
| ABCD Noticias | 2018 | 525000 | 520000 | 5000 |
| ABCD Noticias | 2019 | 540000 | 525000 | 15000 |
| ABCD Noticias | 2020 | 550000 | 540000 | 10000 |
| Noticias Z | 2016 | 720000 | NULO | NULO |
| Noticias Z | 2017 | 750000 | 720000 | 30000 |
| Noticias Z | 2018 | 780000 | 750000 | 30000 |
| Noticias Z | 2019 | 880000 | 780000 | 100000 |
| Noticias Z | 2020 | 910000 | 880000 | 30000 |
En el ejemplo anterior, podemos calcular de manera similar el crecimiento año tras año para el canal de noticias de televisión. Además, una cosa a tener en cuenta en este ejemplo es que no hemos proporcionado ningún parámetro predeterminado a LAG() y, por lo tanto, la función LAG() devuelve NULL en caso de que no haya valores anteriores. La función LAG() se puede implementar a nivel de base de datos y las soluciones de informes de BI como Power BI y Tableau pueden evitar el uso de medidas engorrosas en la capa de informes.
Puntos importantes sobre la función SQL LAG()
- La función SQL LAG() es una función de ventana que permite a los usuarios acceder a datos de filas anteriores en un conjunto de datos.
- Permite a los usuarios comparar los valores de las filas actuales con los valores de filas anteriores, especialmente aquellos relacionados con el tiempo o columnas específicas.
- La función LAG() es valiosa para analizar cambios a lo largo del tiempo, como datos del mercado de valores, tendencias diarias y alteraciones en varias columnas.