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.