Treinamento SQL Server

Módulo 39 — CTEs & Window Functions Avançadas

Recursão, ranking, frames e percentis com precisão.

T-SQL Nível Avançado Hands-on Atualizado: 28 ago 2025

1) CTEs: Não-recursivas & Recursivas

WITH Hier(Id, PaiId, Nvl) AS (
  SELECT Id, PaiId, 0 FROM dbo.Categorias WHERE PaiId IS NULL
  UNION ALL
  SELECT f.Id, f.PaiId, p.Nvl+1 FROM dbo.Categorias f JOIN Hier p ON p.Id=f.PaiId
)
SELECT * FROM Hier;

2) Ranking & Paginação

SELECT *, ROW_NUMBER() OVER (PARTITION BY Categoria ORDER BY Data DESC) AS rn
FROM dbo.Pedidos;

3) Frames: ROWS vs RANGE

SUM(Valor) OVER (PARTITION BY Cat ORDER BY Data
  ROWS BETWEEN 3 PRECEDING AND CURRENT ROW);

4) Janela Móvel & Últimos Valores

LAST_VALUE(Valor) OVER (PARTITION BY Cat ORDER BY Data
  ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING);

5) Percentis & Distribuições

PERCENTILE_CONT(0.95) WITHIN GROUP (ORDER BY Valor)
  OVER (PARTITION BY Categoria);

6) Desempenho & Materialização

7) Laboratório

-- Calcular média móvel 7 dias e ranking por categoria.

8) Exercícios

  1. Top 3 por grupo via DENSE_RANK.

9) Gabarito

DENSE_RANK() OVER (PARTITION BY Cat ORDER BY Valor DESC);

10) Boas Práticas

11) Próximos Passos