SQL Saturday #100 Brazil Windowing Functions no SQL Server 2012 SELECT * FROM (VALUES('Fabiano Neves Amorim'), ('Sr.Nimbus – SQL Server MVP'), (' AS Tab("Sobre mim:")
Patrocinadores
Agenda Set Based vs Row by Row O que são windows functions? Novas funções implementadas no SQL2012 O que ainda falta? Window Frame Demos Perguntas e respostas
Set Based vs Row by Row
O que são windows functions? Similar as funções de agregação Retornam um valor a partir de dados agregados Padrão SQL:2008 Suportado no Oracle, DB2, PostegreSQL It’s all about Sets
Clausula OVER SELECT ID_Conta, DT_Lancamento, VL_Lancamento, SUM(VL_Lancamento) OVER(PARTITION BY ID_Conta ORDER BY DT_Lancamento RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) FROM tbLancamentos GO PARTITION BY Default WINDOW FRAME ORDER BY função de agregação + partition by + order by + window frame
SQL Server 2012 Suporte quase completo a clausula OVER() Order by Partition By Window frame Novas functions: LEAD(), LAG(), FISRT_VALUE(), LAST_VALUE(), CUME_DIST(), PERCENT_RANK(), PERCENTILE_CONT(), PERCENTILE_DISC()
Window Frame [ROWS | RANGE] BETWEEN AND UNBOUNDED PECEDING: Window inicia na primeira linha da partição. CURRENT ROW: Window inicia na linha atual. PRECEDING ou FOLLOWING UNBOUNDED FOLLOWING: Window termina na última linha da partição. CURRENT ROW: Window termina na linha atual. PRECEDING ou FOLLOWING
Window Frame, duas “janelas” USE NorthWind GO SELECT OrderID, CustomerID FROM Orders WHERE CustomerID IN (1,2) ORDER BY CustomerID
Window Frame, “janelas” coexistem
Window Frame – First_Value SELECT OrderID, CustomerID, FIRST_VALUE(OrderID) OVER(PARTITION BY CustomerID ORDER BY OrderID) AS FirstOrderID FROM Orders WHERE CustomerID IN (1,2)
Window Frame – Last_Value SELECT OrderID, CustomerID, LAST_VALUE(OrderID) OVER(PARTITION BY CustomerID ORDER BY OrderID) AS FirstOrderID FROM Orders WHERE CustomerID IN (1,2)
Window Frame – Last_Value …LAST_VALUE(OrderID) OVER(PARTITION BY CustomerID ORDER BY OrderID ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) AS FirstOrderID...
Demonstração
O que ainda falta no SQL2012? Funções: FIRST, retorna o primeiro valor de um grupo ordenado MAX(Cidade) KEEP (DENSE_RANK FIRST ORDER BY SUM(Valor_Pedido))* LAST: último valor de um grupo ordenado MIN(Cidade) KEEP (DENSE_RANK LAST ORDER BY SUM(Valor_Pedido))* NULLs FIRST, NULLs LAST OVER(ORDER BY Coluna1 NULLs FIRST) Interval (Year, Month, Day, Hour, Minute, Second) Window Clause * não standard SELECT LAG(Col1) OVER MinhaWin AS Col1 FROM Tabela1 WINDOW MinhaWin AS (ORDER BY Coluna1 ROWS 2 PRECEDING)
Recursos Treinamentos Sr.Nimbus Artigos simple-talk: Artigos meu blog: functions/ functions/ Video SQL Bits IX Dave Ballantyne ew_in_Denali-TSQL ew_in_Denali-TSQL
Dúvidas e brindes! ? SELECT "Sobre Mim:" FROM (VALUES('Fabiano Neves Amorim'), ('Sr.Nimbus – SQL Server MVP'), (' AS Tab("Sobre mim:")