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 OVER
cláusula tem três cláusulas: partition_clause
, order_clause
, e frame_clause
.
cláusula_partição
O partition_clause
tem a seguinte sintaxe:
PARTITION BY expr1, expr2, ...
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
A PARTITION BY
clá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_clause
tem a seguinte sintaxe:
ORDER BY expr1 [ASC|DESC],...
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
A ORDER BY
cláusula especifica as ordens lógicas das linhas nas partições nas quais a LAST_VALUE()
função opera.
cláusula_frame
Define frame_clause
o 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 overtime
tabela 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 é:
Neste exemplo, a ORDER BY
clá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 ROW
Linguagem 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 FOLLOWING
Linguagem 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:
Neste exemplo, primeiro, a PARTITION BY
cláusula dividia os funcionários por departamentos. Em seguida, a ORDER BY
clá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.