Neste post irei apresentar mais 2 novas funções do SQL 2012, LEAD e LAG, que fazem parte das Analytic Functions.
LEAD - A function LEAD é utilizada para ler o valor da próxima linha. Quando a próxima linha não existir retorna NULL.
LAG - A function LAG é similar a function LEAD, porém ao invés de retornar o próximo valor ela retorna o valor anterior.
Isto é um pedido antigo de desenvolvedores, desde o surgimento da cláusula OVER.
Vamos ver na prática. Criaremos uma tabela onde armazena a cidade e a localização dela em relação a Brasília.
CREATE TABLE Cidade
(
NomeCidade varchar(50),
LocalizacaoKM int
)
GO
Insert into Cidade values('Brasília',0), ('Cristalina',132), ('Paracatu',239), ('Três Marias',474), ('Belo Horizonte',742), ('Governador Valadares',1064)
GO
Usando a função LEAD vamos ver os trechos da viagem
SELECT NomeCidade, LocalizacaoKM Inicial, LEAD(LocalizacaoKM) OVER(ORDER BY LocalizacaoKM) As Final
FROM Cidade
ORDER BY LocalizacaoKM
Agora vamos usar a função LAG para ver a volta
SELECT NomeCidade, LocalizacaoKM Inicial, LAG(LocalizacaoKM) OVER(ORDER BY LocalizacaoKM) As Final
FROM Cidade
order by LocalizacaoKM desc
Isto é possível porque o SQL 2012 armazena a linha anterior/posterior na memória.
Nas versões anteriores era possível, porém tinha que usar self joins trabalhosos.
A função também aceita outros parâmetros como um valor default quando retornar NULL, e você pode especificar quantas linhas ele deseja saltar para frente ou para trás.