sql saturday #100 brazil windowing functions no sql server 2012 select * from (values('fabiano...
TRANSCRIPT
![Page 1: SQL Saturday #100 Brazil Windowing Functions no SQL Server 2012 SELECT * FROM (VALUES('Fabiano Neves Amorim'), ('Sr.Nimbus – SQL Server MVP'), ('fabiano.amorim@srnimbus.com.br](https://reader035.vdocuments.net/reader035/viewer/2022070507/570638431a28abb8238f1c42/html5/thumbnails/1.jpg)
SQL Saturday #100 Brazil
Windowing Functions no SQL Server 2012
SELECT * FROM (VALUES('Fabiano Neves Amorim'), ('Sr.Nimbus – SQL Server MVP'), ('[email protected] | @mcflyamorim'), ('http://blogfabiano.com')) AS Tab("Sobre mim:")
Demo, Scripts.zip
![Page 2: SQL Saturday #100 Brazil Windowing Functions no SQL Server 2012 SELECT * FROM (VALUES('Fabiano Neves Amorim'), ('Sr.Nimbus – SQL Server MVP'), ('fabiano.amorim@srnimbus.com.br](https://reader035.vdocuments.net/reader035/viewer/2022070507/570638431a28abb8238f1c42/html5/thumbnails/2.jpg)
Patrocinadores
![Page 3: SQL Saturday #100 Brazil Windowing Functions no SQL Server 2012 SELECT * FROM (VALUES('Fabiano Neves Amorim'), ('Sr.Nimbus – SQL Server MVP'), ('fabiano.amorim@srnimbus.com.br](https://reader035.vdocuments.net/reader035/viewer/2022070507/570638431a28abb8238f1c42/html5/thumbnails/3.jpg)
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
![Page 4: SQL Saturday #100 Brazil Windowing Functions no SQL Server 2012 SELECT * FROM (VALUES('Fabiano Neves Amorim'), ('Sr.Nimbus – SQL Server MVP'), ('fabiano.amorim@srnimbus.com.br](https://reader035.vdocuments.net/reader035/viewer/2022070507/570638431a28abb8238f1c42/html5/thumbnails/4.jpg)
Set Based vs Row by Row
![Page 5: SQL Saturday #100 Brazil Windowing Functions no SQL Server 2012 SELECT * FROM (VALUES('Fabiano Neves Amorim'), ('Sr.Nimbus – SQL Server MVP'), ('fabiano.amorim@srnimbus.com.br](https://reader035.vdocuments.net/reader035/viewer/2022070507/570638431a28abb8238f1c42/html5/thumbnails/5.jpg)
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
![Page 6: SQL Saturday #100 Brazil Windowing Functions no SQL Server 2012 SELECT * FROM (VALUES('Fabiano Neves Amorim'), ('Sr.Nimbus – SQL Server MVP'), ('fabiano.amorim@srnimbus.com.br](https://reader035.vdocuments.net/reader035/viewer/2022070507/570638431a28abb8238f1c42/html5/thumbnails/6.jpg)
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 tbLancamentosGO
PARTITION BYDefault
WINDOW FRAME
ORDER BY
função de agregação + partition by + order by + window frame
![Page 7: SQL Saturday #100 Brazil Windowing Functions no SQL Server 2012 SELECT * FROM (VALUES('Fabiano Neves Amorim'), ('Sr.Nimbus – SQL Server MVP'), ('fabiano.amorim@srnimbus.com.br](https://reader035.vdocuments.net/reader035/viewer/2022070507/570638431a28abb8238f1c42/html5/thumbnails/7.jpg)
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()
![Page 8: SQL Saturday #100 Brazil Windowing Functions no SQL Server 2012 SELECT * FROM (VALUES('Fabiano Neves Amorim'), ('Sr.Nimbus – SQL Server MVP'), ('fabiano.amorim@srnimbus.com.br](https://reader035.vdocuments.net/reader035/viewer/2022070507/570638431a28abb8238f1c42/html5/thumbnails/8.jpg)
Window Frame
[ROWS | RANGE] BETWEEN <Start expr> AND <End expr>
<Start expr>UNBOUNDED PECEDING: Window inicia na primeira linha da partição.CURRENT ROW: Window inicia na linha atual.<unsigned integer literal> PRECEDING ou FOLLOWING
<End expr>UNBOUNDED FOLLOWING: Window termina na última linha da partição.CURRENT ROW: Window termina na linha atual.<unsigned integer literal> PRECEDING ou FOLLOWING
![Page 9: SQL Saturday #100 Brazil Windowing Functions no SQL Server 2012 SELECT * FROM (VALUES('Fabiano Neves Amorim'), ('Sr.Nimbus – SQL Server MVP'), ('fabiano.amorim@srnimbus.com.br](https://reader035.vdocuments.net/reader035/viewer/2022070507/570638431a28abb8238f1c42/html5/thumbnails/9.jpg)
Window Frame, duas “janelas”
USE NorthWindGOSELECT OrderID, CustomerID FROM Orders WHERE CustomerID IN (1,2) ORDER BY CustomerID
![Page 10: SQL Saturday #100 Brazil Windowing Functions no SQL Server 2012 SELECT * FROM (VALUES('Fabiano Neves Amorim'), ('Sr.Nimbus – SQL Server MVP'), ('fabiano.amorim@srnimbus.com.br](https://reader035.vdocuments.net/reader035/viewer/2022070507/570638431a28abb8238f1c42/html5/thumbnails/10.jpg)
Window Frame, “janelas” coexistem
![Page 11: SQL Saturday #100 Brazil Windowing Functions no SQL Server 2012 SELECT * FROM (VALUES('Fabiano Neves Amorim'), ('Sr.Nimbus – SQL Server MVP'), ('fabiano.amorim@srnimbus.com.br](https://reader035.vdocuments.net/reader035/viewer/2022070507/570638431a28abb8238f1c42/html5/thumbnails/11.jpg)
Window Frame – First_ValueSELECT OrderID, CustomerID, FIRST_VALUE(OrderID) OVER(PARTITION BY CustomerID ORDER BY OrderID) AS FirstOrderID FROM Orders WHERE CustomerID IN (1,2)
![Page 12: SQL Saturday #100 Brazil Windowing Functions no SQL Server 2012 SELECT * FROM (VALUES('Fabiano Neves Amorim'), ('Sr.Nimbus – SQL Server MVP'), ('fabiano.amorim@srnimbus.com.br](https://reader035.vdocuments.net/reader035/viewer/2022070507/570638431a28abb8238f1c42/html5/thumbnails/12.jpg)
Window Frame – Last_ValueSELECT OrderID, CustomerID, LAST_VALUE(OrderID) OVER(PARTITION BY CustomerID ORDER BY OrderID) AS FirstOrderID FROM Orders WHERE CustomerID IN (1,2)
![Page 13: SQL Saturday #100 Brazil Windowing Functions no SQL Server 2012 SELECT * FROM (VALUES('Fabiano Neves Amorim'), ('Sr.Nimbus – SQL Server MVP'), ('fabiano.amorim@srnimbus.com.br](https://reader035.vdocuments.net/reader035/viewer/2022070507/570638431a28abb8238f1c42/html5/thumbnails/13.jpg)
Window Frame – Last_Value…LAST_VALUE(OrderID) OVER(PARTITION BY CustomerID ORDER BY OrderID
ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) AS
FirstOrderID ...
![Page 14: SQL Saturday #100 Brazil Windowing Functions no SQL Server 2012 SELECT * FROM (VALUES('Fabiano Neves Amorim'), ('Sr.Nimbus – SQL Server MVP'), ('fabiano.amorim@srnimbus.com.br](https://reader035.vdocuments.net/reader035/viewer/2022070507/570638431a28abb8238f1c42/html5/thumbnails/14.jpg)
Demonstração
![Page 15: SQL Saturday #100 Brazil Windowing Functions no SQL Server 2012 SELECT * FROM (VALUES('Fabiano Neves Amorim'), ('Sr.Nimbus – SQL Server MVP'), ('fabiano.amorim@srnimbus.com.br](https://reader035.vdocuments.net/reader035/viewer/2022070507/570638431a28abb8238f1c42/html5/thumbnails/15.jpg)
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 Tabela1WINDOW MinhaWin AS (ORDER BY Coluna1 ROWS 2 PRECEDING)
![Page 16: SQL Saturday #100 Brazil Windowing Functions no SQL Server 2012 SELECT * FROM (VALUES('Fabiano Neves Amorim'), ('Sr.Nimbus – SQL Server MVP'), ('fabiano.amorim@srnimbus.com.br](https://reader035.vdocuments.net/reader035/viewer/2022070507/570638431a28abb8238f1c42/html5/thumbnails/16.jpg)
Recursos Treinamentos Sr.Nimbus
http://www.srnimbus.com.br/ Artigos simple-talk:
http://tinyurl.com/SQLSat100-WF1 http://tinyurl.com/SQLSat100-WF2
Artigos meu blog: http://blogfabiano.com/category/windows-functions/
Video SQL Bits IX Dave Ballantyne http://
www.sqlbits.com/Sessions/Event9/Whats_new_in_Denali-TSQL
![Page 17: SQL Saturday #100 Brazil Windowing Functions no SQL Server 2012 SELECT * FROM (VALUES('Fabiano Neves Amorim'), ('Sr.Nimbus – SQL Server MVP'), ('fabiano.amorim@srnimbus.com.br](https://reader035.vdocuments.net/reader035/viewer/2022070507/570638431a28abb8238f1c42/html5/thumbnails/17.jpg)
Dúvidas e brindes!
?
SELECT "Sobre Mim:" FROM (VALUES('Fabiano Neves Amorim'), ('Sr.Nimbus – SQL Server MVP'), ('[email protected]|@mcflyamorim'), ('http://blogfabiano.com')) AS Tab("Sobre mim:")