Función de retraso de SQL Server

Función de retraso de SQL Server

La función LAG en SQL Server es una función de Windows introducida en SQL Server 2012. Esta función le permite obtener los datos de filas anteriores según el valor de compensación especificado. Piense en la función LAG como la capacidad de acceder a los datos de las filas anteriores desde la fila actual.

Por ejemplo, desde la fila actual, puede acceder a la fila anterior, que se convierte en la fila actual, y puede acceder a la fila anterior, etc.

En este artículo, aprenderemos cómo usar la función LAG en SQL Server utilizando varios ejemplos.

Función SQL Server Lag ()

Expresamos la sintaxis de la función como:

Lag (expresión, offset [, predeterminado])
ENCIMA (
[Partition by Partition_By_Expression]
orden_by_clause
)

Parámetros de función y valor de retorno

En la sintaxis anterior, tenemos los siguientes parámetros:

  1. Expresión - una columna o expresión utilizada por la función de retraso para realizar los cálculos. Este es un parámetro requerido, y la expresión debe devolver un valor único.
  2. Compensar - un valor entero positivo que define cuántas filas atrás se recuperará la función de retraso. Si no se especifica, el valor predeterminado se establece en 1.
  3. Por defecto - Especifica el valor predeterminado devuelto por la función si el valor de desplazamiento especificado va más allá del alcance de la partición. Por defecto, la función return null.
  4. Partition_by_expression - Una expresión utilizada para crear particiones de datos lógicas. SQL Server aplicará la función LAG a los conjuntos de particiones resultantes.
  5. Orden_by_clause - una expresión para definir cómo se ordenan las filas en las particiones resultantes.

La función devuelve el tipo de datos de la expresión escalar.

Ejemplos de retraso de SQL Server

Veamos un ejemplo práctico para comprender mejor cómo usar la función de retraso. Comencemos agregando datos de muestra como se muestra:

Crear base de datos SampleDB;
IR
Usar SampleDB;
Crear tabla lag_func (
ID int no identidad nula (1,1) clave principal,
dbname varchar (50),
Paradigm Varchar (50),
);
Insertar en Lag_Func (dbname, paradigm)
Valores ('mysql', 'relacional'),
('MongoDB', 'Documento'),
('Memcached', 'Tienda de valor clave'),
('Etcd', 'tienda de valores clave'),
('Apache Cassandra', 'columna ancha'),
('CouchDB', 'Documento'),
('PostgreSQL', 'Relacional'),
('SQL Server', 'Relacional'),
('neo4j', 'gráfico'),
('Elasticsearch', 'text completo');
Seleccionar * de Lag_Func;

El conjunto de consultas anterior debe devolver datos como:

Ejecute la función LAG en la columna DBName como se muestra en la consulta de ejemplo a continuación:

SELECCIONAR *, LAG (DBNAME, 1) Over (Order by dbName) como anterior_db de lag_func;

La consulta anterior devuelve una salida como:

Aviso, la primera fila contiene un valor nulo, ya que no tiene un valor anterior.

Ejemplo 2:

En lugar de obtener un valor nulo donde la fila no contenga una fila anterior, podemos establecer un valor predeterminado, como se muestra en la consulta de ejemplo a continuación:

Seleccione DBName, LAG (DBNAME, 1, 'N/A')
Over (orden por dbname) como anterior_db
De lag_func;

La consulta anterior devuelve una salida similar a la anterior. Sin embargo, en lugar de NULL, obtenemos la cadena especificada.

Ejemplo 3: Valor de compensación personalizado

También podemos obtener los valores en un valor de desplazamiento personalizado. Por ejemplo, para obtener el valor de tres filas anteriores, podemos usar la consulta:

Seleccione DBNAME, LAG (DBNAME, 3, 'N/A')
Over (orden por dbname) como anterior_db
De lag_func;

El código de ejemplo anterior debe devolver el resultado como:

Aquí, las primeras 3 columnas son nulas a medida que los valores de desplazamiento van más allá del alcance de las filas disponibles.

Ejemplo 4: Partición por

Podemos crear particiones lógicas de datos relacionados utilizando la partición por cláusula. Luego podemos aplicar la función de retraso a cada partición.

Considere el ejemplo a continuación:

Seleccione DBName, Paradigm, LAG (DBName, 1, 'N/A')
Over (Partition by Paradigm Order by DBName) como anterior_db
De lag_func;

La consulta anterior devuelve un conjunto de consultas de ejemplo como:

La consulta crea 6 particiones basadas en el paradigma en el resultado anterior. En cada partición, la función de retraso obtiene la fila anterior.

Conclusión

Este artículo le enseñó cómo usar la función de retraso de SQL Server para recuperar la fila anterior de un conjunto resultante.

Gracias por leer!