Função MySQL LAST_VALUE

Resumo : neste tutorial, você aprenderá como usar a LAST_VALUE()função MySQL para retornar a última linha em um conjunto ordenado de linhas.

Visão geral da função MySQL LAST_VALUE()

A LAST_VALUE()função é uma função de janela que permite selecionar a última linha em um conjunto ordenado de linhas.

O seguinte mostra a sintaxe da LAST_VALUE()função:

LAST_VALUE (expression) OVER (
   [partition_clause]
   [order_clause]
   [frame_clause]
)Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

A LAST_VALUE()função retorna o valor da expressionúltima linha de um conjunto classificado de linhas.

A OVERcláusula tem três cláusulas: partition_clause, order_clause, e frame_clause.

cláusula_partição

O partition_clausetem a seguinte sintaxe:

PARTITION BY expr1, expr2, ...Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

A PARTITION BYcláusula distribui os conjuntos de resultados em múltiplas partições especificadas por uma ou mais expressões expr1, expr2, etc. A LAST_VALUE()função é aplicada a cada partição independentemente.

cláusula_pedido

O order_clausetem a seguinte sintaxe:

ORDER BY  expr1 [ASC|DESC],...Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

A ORDER BYcláusula especifica as ordens lógicas das linhas nas partições nas quais a LAST_VALUE()função opera.

 cláusula_frame

Define frame_clauseo subconjunto da partição atual à qual a LAST_VALUE()função se aplica. Para obter informações mais detalhadas sobre o frame_clause, consulte o tutorial de funções da janela .

LAST_VALUE()Exemplos de funções MySQL

Vamos configurar uma tabela de exemplo para demonstração.

A seguir está o script para criar a overtimetabela e preencher os dados na tabela.

CREATE TABLE overtime (
    employee_name VARCHAR(50) NOT NULL,
    department VARCHAR(50) NOT NULL,
    hours INT NOT NULL,
     PRIMARY KEY (employee_name , department)
);
INSERT INTO overtime(employee_name, department, hours)
VALUES('Diane Murphy','Accounting',37),
('Mary Patterson','Accounting',74),
('Jeff Firrelli','Accounting',40),
('William Patterson','Finance',58),
('Gerard Bondur','Finance',47),
('Anthony Bow','Finance',66),
('Leslie Jennings','IT',90),
('Leslie Thompson','IT',88),
('Julie Firrelli','Sales',81),
('Steve Patterson','Sales',29),
('Foon Yue Tseng','Sales',65),
('George Vanauf','Marketing',89),
('Loui Bondur','Marketing',49),
('Gerard Hernandez','Marketing',66),
('Pamela Castillo','SCM',96),
('Larry Bott','SCM',100),
('Barry Jones','SCM',65);
Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

1) Usando a função MySQL LAST_VALUE() em todo o exemplo de resultado da consulta

A declaração a seguir obtém o nome do funcionário, as horas extras e o funcionário que tem o maior número de horas extras:

SELECT
    employee_name,
    hours,
    LAST_VALUE(employee_name) OVER (
        ORDER BY hours
        RANGE BETWEEN
            UNBOUNDED PRECEDING AND
            UNBOUNDED FOLLOWING
    ) highest_overtime_employee
FROM
    overtime;Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

A saída é:

Exemplo de função MySQL LAST_VALUE

Neste exemplo, a ORDER BYcláusula especificou a ordem lógica das linhas no conjunto de resultados por horas, de menor para maior.

A especificação do quadro padrão é a seguinte:

RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROWLinguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Isso significa que o quadro começa na primeira linha e termina na linha atual do conjunto de resultados.

Portanto, para obter o funcionário que possui o maior número de horas extras, alteramos a especificação do quadro para o seguinte:

RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWINGLinguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Isto indica que o quadro começa na primeira linha e termina na última linha do conjunto de resultados.

2) Exemplo de uso da função MySQL LAST_VALUE() sobre partições

A seguinte declaração encontra o funcionário que tem o maior número de horas extras em cada departamento:

SELECT
    employee_name,
    department,
    hours,
    LAST_VALUE(employee_name) OVER (
		PARTITION BY department
        ORDER BY hours
        RANGE BETWEEN
	    UNBOUNDED PRECEDING AND
            UNBOUNDED FOLLOWING
	) most_overtime_employee
FROM
    overtime;Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

A imagem a seguir mostra a saída:

Exemplo de partições da função MySQL LAST_VALUE OVER

Neste exemplo, primeiro, a PARTITION BYcláusula dividia os funcionários por departamentos. Em seguida, a ORDER BYcláusula ordena os funcionários de cada departamento em horas extras de menor para maior.

A especificação do quadro neste caso é a partição inteira. Como resultado, a LAST_VALUE()função selecionou a última linha de cada partição que era o funcionário que teve o maior número de horas extras.

Resumo

  • Use a LAST_VALUE()função MySQL para obter a última linha em um conjunto ordenado de linhas.

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *