Recientemente hice el examen 70-461 Querying Microsoft SQL Server 2012, una de las preguntas se refería a las función LAG, en este video de 8 minutos se explica su funcionamiento.
La funciones LAG y LEAD en SQL Server permiten obtener de un campo el valor anterior (LAG) a la fila o el valor posterior (LEAD) a la fila.
La funciones LAG y LEAD en SQL Server permiten obtener de un campo el valor anterior (LAG) a la fila o el valor posterior (LEAD) a la fila.
En la imagen de abajo tomando como referencia el campo precio de la fila tres podemos ver como estas funciones me permiten tomar el precio de la fila anterior o sea la fila 2 y llamarlo “PrecioAnterior” y luego tomar el precio de la fila siguiente es decir la fila 4 y llamar al resultado “Precio Siguiente”
El scrip del ejemplo es el siguiente:
CREATE TABLE PreciosProducto
(NombreProducto VARCHAR(100), FechaEvaluacion DATETIME, Precio MONEY)
GO
(NombreProducto VARCHAR(100), FechaEvaluacion DATETIME, Precio MONEY)
GO
INSERT INTO PreciosProducto (NombreProducto,FechaEvaluacion, Precio) VALUES
(‘Pintura Spray Rojo Fuego’,’01-01-2015′, 23.32),
(‘Pintura Spray Rojo Fuego’,’01-02-2015′, 26.11),
(‘Pintura Spray Rojo Fuego’,’01-03-2015′, 25.26),
(‘Pintura Spray Rojo Fuego’,’01-04-2015′, 30.45),
(‘Pintura Spray Rojo Fuego’,’01-05-2015′, 30.20),
(‘Pintura Spray Rojo Fuego’,’01-06-2015′, 31.12),
(‘Pintura Spray Rojo Fuego’,’01-07-2015′, 25.75),
(‘Pintura Spray Rojo Fuego’,’01-08-2015′, 24.21),
(‘Pintura Spray Rojo Fuego’,’01-09-2015′, 25.12),
(‘Pintura Spray Rojo Fuego’,’01-10-2015′, 28.26)
GO
(‘Pintura Spray Rojo Fuego’,’01-01-2015′, 23.32),
(‘Pintura Spray Rojo Fuego’,’01-02-2015′, 26.11),
(‘Pintura Spray Rojo Fuego’,’01-03-2015′, 25.26),
(‘Pintura Spray Rojo Fuego’,’01-04-2015′, 30.45),
(‘Pintura Spray Rojo Fuego’,’01-05-2015′, 30.20),
(‘Pintura Spray Rojo Fuego’,’01-06-2015′, 31.12),
(‘Pintura Spray Rojo Fuego’,’01-07-2015′, 25.75),
(‘Pintura Spray Rojo Fuego’,’01-08-2015′, 24.21),
(‘Pintura Spray Rojo Fuego’,’01-09-2015′, 25.12),
(‘Pintura Spray Rojo Fuego’,’01-10-2015′, 28.26)
GO
El Query con las funciones de ejemplo que genera la imagen de ejemplo anterior es:
SELECT NombreProducto,FechaEvaluacion,Precio
,LAG(Precio) OVER (ORDER BY FechaEvaluacion) AS PrecioAnterior
,LEAD(Precio) OVER (ORDER BY FechaEvaluacion) AS PrecioSiguiente
FROM PreciosProducto
ORDER BY FechaEvaluacion
,LAG(Precio) OVER (ORDER BY FechaEvaluacion) AS PrecioAnterior
,LEAD(Precio) OVER (ORDER BY FechaEvaluacion) AS PrecioSiguiente
FROM PreciosProducto
ORDER BY FechaEvaluacion