Uso de la función de retraso en mysql

Uso de la función de retraso en mysql
MySQL versión 8.0 introdujo las funciones de la ventana MySQL, lo que le permite realizar consultas en un método más fácil y organizado. Así, aumentando el procesamiento y el rendimiento. Dichas funciones incluyen: rank (), row_rank (), last_value () y muchas más.

En este tutorial, nos centraremos en usar una de las funciones MySQL: Lag (). Es una función de ventana que le permite acceder y obtener el valor de las filas anteriores de la fila actual dentro del mismo conjunto de resultados.

Sintaxis básica

La sintaxis general para usar la función mysql lag () es:

LAG (expresión, offsetValue, defaultVar) Over (
Partición por [expresión]
Orden por expresión [ASC | Desc]
);

Tomemos un momento para explicar algunos de los parámetros en la sintaxis de la función Lag ().

Son los siguientes:

Expresión: Este es el valor devuelto por la función de la fila que lidera la fila actual por el valor de desplazamiento especificado.

OffsetValue: Este valor representa el número de filas que preceden a la fila actual desde la cual obtener el valor. Este valor debe ser 0 o un valor superior a 0.

NOTA: El valor de 0 representa la fila actual.

DefaultVar: Este valor se devuelve como el valor predeterminado por la función si no existe una fila anterior. Si el valor predeterminado no está definido en el parámetro de función y no existe una fila anterior, la función devuelve un valor nulo.

Partición por: La partición por cláusula divide las filas en un conjunto de particiones lógicas. La función de retraso se aplica a las particiones divididas.

Ordenar por: Como de costumbre, este valor especifica el orden de las filas en las particiones disponibles.

Ejemplo de casos de uso

Veamos los casos de uso de ejemplo de la función Lag () para comprender cómo funciona. Comience creando una base de datos de muestra llamada Sample_DB;

Drop Base de datos si existe sample_database;
Crear base de datos sample_database;
Usar sample_database;
Tabla de caída si existe usuarios;
Crear usuarios de la tabla
(
ID int primaria clave auto_increment,
Nombre Varchar (255),
Anotar int,
Fecha de inscrito_date
);
Insertar en los usuarios (ID, nombre, puntaje, inscrit_date)
Valores (1, "Alexandra", 99, '2021-01-10'),
(2, "Jacob", 81, '2021-05-20'),
(3, "Leonard", 67, '2020-01-02'),
(4, "Peter", 88, '2021-03-03'),
(5, "Amy", 100, '2021-05-05');
Seleccionar * de los usuarios;

Ahora que tenemos una base de datos de muestra para trabajar, podemos continuar e ilustrar cómo trabajar con la función de retraso mysql.

Ejemplo 1: función de retraso sin valor predeterminado
Considere el ejemplo a continuación que aplica la función LAG en InsCRILD_DATE con un valor de compensación de 1.

SELECT *, LAG (INCRIM_DATE, 1) Over (Order by ID ASC) como anterior_date de sample_database.usuarios;

Una vez que ejecutamos la consulta anterior, obtenemos una nueva columna anterior_date que contiene el valor anterior de la fila como se especifica con un valor de desplazamiento de 1. Dado que no hay valor previo en la primera fila, el valor es nulo.

Nota: puede especificar el valor predeterminado si una fila no tiene un valor anterior.

La salida es como se muestra a continuación:

Ejemplo 2: función de retraso con valor predeterminado
También puede especificar un valor predeterminado para una fila donde el valor anterior no existe. En nuestro ejemplo, estableceremos el valor predeterminado en la fecha actual.

Nota: En este ejemplo, también estableceremos el valor de desplazamiento como 2 en lugar de 1.

Considere la consulta a continuación:

SELECT *, LAG (INCRIM_DATE, 2, CURDATE ()) Over (Order by ID ASC) como anterior_Date de sample_database.usuarios;

Una vez que ejecutemos la consulta anterior, obtendremos valores con un valor de compensación de dos y la fecha actual como el valor predeterminado para los valores nulos.

La salida es como se muestra a continuación:

Ejemplo 3: función de retraso con partición por
Podemos usar la función lag () con la partición por cláusula. Esta cláusula primero agrupa los datos en varios subconjuntos lógicos y luego aplica la función de retraso a las particiones.

Antes de continuar, veamos los datos en la tabla del usuario. Considere la siguiente consulta:

Insertar en los usuarios (ID, nombre, puntaje, inscrit_date)
Valores (1, "Alexandra", 99, '2021-01-10'),
(2, "Jacob", 81, '2021-05-20'),
(3, "Leonard", 67, '2020-01-02'),
(4, "Peter", 88, '2021-03-03'),
(5, "Amy", 100, '2021-05-05'),
(6, "Tobias", 100, '2020-06-06'),
(7, "Kurtzman", 67, '2020-07-10'),
(8, "Inmortal", 50, '2021-03-01'),
(9, "Anthony", 81, '2021-01-01'),
(10, "James", 77, '2021-02-03');

Ahora que tenemos una tabla con 10 valores, podemos dividir los datos por la puntuación y luego aplicar la función LAG.

La operación anterior se ilustra en la consulta a continuación:

SELECT *, LAG (INCRIM_DATE, 1, CURDATE ()) Over (Partition por orden de puntaje por ID ASC) como anterior_Date de sample_database.usuarios;

En la consulta anterior, comenzamos dividiendo los datos en función de la puntuación y luego aplicando la función LAG con un valor de compensación de 1. También establecemos el valor predeterminado como la fecha actual. El resultado de salida es como se muestra a continuación:

Nota: También puede tener en cuenta que la primera fila de cada partición contiene la fecha actual, lo que significa que no hay valor previo en la fila establecida.

Conclusión

Este tutorial ha discutido cómo funciona la función lag () para obtener valores de las filas anteriores en la fila actual.

Recordar:

  • La función mysql es una función de ventana que obtiene el valor de la fila anterior en función del valor de desplazamiento especificado. Es decir, si el valor de desplazamiento es 1, obtiene el valor directamente por encima de él.
  • Por defecto, la función lag () utiliza un valor de desplazamiento de 1, a menos que se especifique explícitamente.
  • Si los datos están fuera de rango (sin valor anterior en el desplazamiento especificado) el valor se establece en NULL.
  • La función lag () también acepta la partición por cláusula, que agrupa datos en varias particiones lógicas basadas en la columna o condición especificada.

Gracias por leer.