SQL Server 2012 – LEAD e LAG

Primeiramente queria pedir desculpas pelo tempo em que não consegui postar nada, existem varias coisas acontecendo, o que impede minha total dedicação ao Blog, todo caso, não posso deixar de postar sobre algumas coisas bem legais!!!
Essa semana começei a estudar para as provas do SQL Server 2012, portanto, muito provavelmente meus proximos posts serão todos relacionados a tal.

Para este primeiro, gostaria de comentar sobre 2 funções bem simples, porem extremamente uteis chamadas LEAD e LAG.

Muito provavelmente voces ja passaram por situações aonde certa linha deve receber o valor de uma linha de baixo ou de cima, um exemplo classico é por exemplo:

Cidade KmInicial KmFinak
Cidade a 1 50
Cidade b 51 100
Cidade c 101 105

Em situações normais até o SQL Server 2008, voce seria obrigado, para resolver este problema, a:
1. Ou armazenar os valores iniciais e finais de cada cidade, o que é bem ruim, uma vez que estou seguindo a regra de que a

proxima cidade inicia em 1Km após a anterior, eu conseguiria tal valor.
2. Utilizando Self Joins, o que pode causar a consulta um pouco complexa, principalmente para iniciantes….

Porem, no SQL Server 2012, temos as funções LEAD e LAG (Como descrito acima….), porem, o que elas fazem?

LAG: Pega qualquer valor, de uma linha acima da atual, seus valores de entrada são obrigatoriamente o campo da tabela que voce quer, o numero de linhas acima que voce quer (Que em 99% da vezes sera 1, ou seja, a linha acima) e um valor default caso o mesmo não existe (Para quando ser a primeira linha por exemplo…)

LEAD: Possui os mesmos valores de entrada, porem, ao invez de pegarmos linha acima, podemos pegar linha abaixo.
Segue exemplo de TSQL

CREATE TABLE Analises
(
	Cidade VARCHAR(100),
	Total INT
)

INSERT INTO Analises VALUES
('São Paulo', 10),
('São Paulo', 7),
('São Paulo', 6),
('São Paulo', 3),
('Campinas', 15),
('Campinas', 10)

--LEAD
SELECT Cidade, Total, LEAD(Total, 1, 0) OVER(ORDER BY Total) As Proximo_Total
FROM Analises

--LAG
SELECT Cidade, Total, LAG(Total, 1, 0) OVER(ORDER BY Total) As Ultimo_Total
FROM Analises

Anúncios
Post a comment or leave a trackback: Trackback URL.

Comentários

  • Luca  On 02/04/2012 at 13:40

    Não entendo muito coisa, mas o que consigo entender, acho super bacana.

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s

%d blogueiros gostam disto: