Los datos expuestos en este blog, son solo de índole informativo. Por favor realiza siempre una copia de seguridad antes de realizar cualquier cambio en tu proyecto.
Servidor SQL: función de PLOMO
Este tutorial de SQL Server describe cómo usar función principal Sintaxis y ejemplos en SQL Server (Transact-SQL).
describir
En SQL Server (Transact-SQL), la función LEAD es una función analítica que le permite consultar varias filas de una tabla a la vez sin unir la tabla a sí misma. Devuelve el valor de la siguiente fila de la tabla. Para devolver un valor de la fila anterior, intente usar la función LAG.
sintaxis
La sintaxis de la función LEAD en SQL Server (Transact-SQL) es:
LEAD ( expression [, offset [, default] ] ) OVER ( [ query_partition_clause ] order_by_clause )
parámetro o parámetro
Las expresiones pueden contener expresiones de otras funciones integradas, pero pueden No Contiene cualquier función analítica. El desplazamiento es opcional. Es el desplazamiento físico de la fila actual en la tabla. Si se omite este parámetro, el valor predeterminado es 1. predeterminado opcional. Este valor se devuelve si el desplazamiento está fuera de los límites de la tabla. Si se omite este parámetro, por defecto está vacío. cláusula_partición_consulta Opcional. Se utiliza para dividir los resultados en grupos basados en una o más expresiones. order_by_clause opcional. Se utiliza para ordenar los datos dentro de cada partición.
aplicar para
La función LEAD está disponible en las siguientes versiones de SQL Server (Transact-SQL):
- Servidor SQL 2017, Servidor SQL 2016, Servidor SQL 2014, Servidor SQL 2012
Ejemplo de DDL/DML
Si desea seguir este tutorial, obtenga DDL para crear las tablas y DML para completar los datos. ¡Entonces pruebe los ejemplos en su propia base de datos!
ejemplo
La función LEAD está disponible para SQL Server (Transact-SQL).
Veamos un ejemplo. Si tenemos una tabla de empleados con los siguientes datos:
ID de empleado | apellido | nombre | salario | dept_id |
---|---|---|---|---|
12009 | Sutherland | Bárbara | 54000 | 45 |
34974 | Yates | Fred | 80000 | 45 |
34987 | Erickson | neil | 42000 | 45 |
45001 | parker | Salida | 57500 | 30 |
75623 | puertas | Steve | 65000 | 30 |
Ejecutamos la siguiente instrucción SQL:
SELECT dept_id, last_name, salary, LEAD (salary,1) OVER (ORDER BY salary) AS next_highest_salary FROM employees;
Devolverá los siguientes resultados:
dept_id | apellido | salario | próximo_salario_más_alto |
---|---|---|---|
45 | Erickson | 42000 | 54000 |
45 | Sutherland | 54000 | 57500 |
30 | parker | 57500 | 65000 |
30 | puertas | 65000 | 80000 |
45 | Yates | 80000 | nulo |
En este ejemplo, la función LEAD ordenará todos los valores de salario en la tabla de empleados en orden ascendente y devolverá el siguiente salario más alto porque usamos la compensación 1.
Si, en cambio, usáramos una compensación de 2, arrojaría un salario 2 salarios más alto. Si usáramos una compensación de 3, arrojaría un salario 3 más alto… y así sucesivamente.
usar partición
Ahora veamos un ejemplo más complejo donde usamos una cláusula de partición de consulta para devolver el siguiente salario más alto para cada empleado dentro de su departamento.
Ingrese la siguiente instrucción SQL:
SELECT dept_id, last_name, salary, LEAD (salary,1) OVER (PARTITION BY dept_id ORDER BY salary) AS next_highest_salary FROM employees;
Devolverá los siguientes resultados:
dept_id | apellido | salario | próximo_salario_más_alto |
---|---|---|---|
30 | parker | 57500 | 65000 |
30 | puertas | 65000 | nulo |
45 | Erickson | 42000 | 54000 |
45 | Sutherland | 54000 | 80000 |
45 | Yates | 80000 | nulo |
En este ejemplo, la función LEAD dividirá los resultados por dept_id y luego ordenará por salario como se muestra a continuación. PARTITION BY dept_id ORDER BY salary
Esto significa que la función LEAD solo evaluará el valor del salario si el dept_id coincide con el dept_id del registro actual. Cuando se encuentra un nuevo dept_id, la función LEAD reinicia el cálculo y las particiones con el dept_id adecuado.
Como puede ver, el segundo registro en el conjunto de resultados tiene un valor NULL para next_highest_salary porque es el último registro en la partición con dept_id 30 (ordenado por salario). Lo mismo ocurre con el quinto registro con un dept_id de 45.