Funções analíticas

Funções para manipular dados no SQL Server

Ana Voicu

Data Engineer

FIRST_VALUE()

FIRST_VALUE(numeric_expression) 
    OVER ([PARTITION BY column] ORDER BY column ROW_or_RANGE frame)
  • Retorna o primeiro valor em um conjunto ordenado.

Componentes da cláusula OVER

Componente Status Descrição
PARTITION BY column opcional divide o conjunto em partições
ORDER BY column obrigatório ordena o conjunto de resultados
ROW_or_RANGE frame opcional define os limites da partição
Funções para manipular dados no SQL Server

LAST_VALUE()

LAST_VALUE(numeric_expression) 
    OVER ([PARTITION BY column] ORDER BY column ROW_or_RANGE frame)
  • Retorna o último valor em um conjunto ordenado.
Funções para manipular dados no SQL Server

Limites de partição

RANGE BETWEEN start_boundary AND end_boundary
ROWS BETWEEN start_boundary AND end_boundary
Limite Descrição
UNBOUNDED PRECEDING primeira linha da partição
UNBOUNDED FOLLOWING última linha da partição
CURRENT ROW linha atual
PRECEDING linha anterior
FOLLOWING próxima linha
Funções para manipular dados no SQL Server

Exemplo de FIRST_VALUE() e LAST_VALUE()

SELECT
    first_name + ' ' + last_name AS name,
    gender,
    total_votes AS votes,    
    FIRST_VALUE(total_votes) 
    OVER (PARTITION BY gender ORDER BY total_votes) AS min_votes,
    LAST_VALUE(total_votes) 
        OVER (PARTITION BY gender ORDER BY total_votes 
                ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) AS max_votes
FROM voters;
| name            | gender | votes | min_votes | max_votes |
|-----------------|--------|-------|-----------|-----------|
| Michele Suarez  | F      | 20    | 20        | 189       |
| ...             | ...    | ...   | 20        | 189       |
| Marcus Jenkins  | M      | 16    | 16        | 182       |
| Micheal Vazquez | M      | 18    | 16        | 182       |
Funções para manipular dados no SQL Server

LAG() e LEAD()

LAG(numeric_expression) OVER ([PARTITION BY column] ORDER BY column)

  • Acessa dados da linha anterior no mesmo conjunto de resultados.

LEAD(numeric_expression) OVER ([PARTITION BY column] ORDER BY column)

  • Acessa dados da linha seguinte no mesmo conjunto de resultados.
Funções para manipular dados no SQL Server

Exemplo de LAG() e LEAD()

SELECT 
    broad_bean_origin AS bean_origin,
    rating,
    cocoa_percent,
    LAG(cocoa_percent) OVER(ORDER BY rating ) AS percent_lower_rating,
    LEAD(cocoa_percent) OVER(ORDER BY rating ) AS percent_higher_rating
FROM ratings
WHERE company = 'Felchlin'
ORDER BY rating ASC;
| bean_origin        | rating | cocoa_percent | percent_lower_rating | percent_higher_rating |
|--------------------|--------|---------------|----------------------|-----------------------|
| Grenada            | 3      | 0.58          | NULL                 | 0.62                  |
| Dominican Republic | 3.75   | 0.62          | 0.58                 | 0.64                  |
| Madagascar         | 3.75   | 0.64          | 0.74                 | 0.65                  |
| Venezuela          | 4      | 0.65          | 0.74                 | NULL                  |
Funções para manipular dados no SQL Server

Vamos praticar!

Funções para manipular dados no SQL Server

Preparing Video For Download...