MariaDB LAST_VALUE() 函数的基础用法与实例

MariaDB 的 LAST_VALUE() 函数正是为此设计的,它可以在一系列值中返回最后一个值。

发布于

在数据库查询中,有时我们需要获取某个数据集中的最后一个值。MariaDB 的 LAST_VALUE() 函数正是为此设计的,它可以在一系列值中返回最后一个值。这个函数在数据分析和报告生成中非常有用,尤其是当我们需要从一组结果中提取最终数据时。

语法

LAST_VALUE() 函数的基本语法是:

LAST_VALUE(expr) OVER ( [ PARTITION BY partition_expression ] [ ORDER BY order_list ] )
  • expr 是需要返回最后值的表达式。
  • PARTITION BY 子句是可选的,用于将结果集分为不同的分区,在每个分区内独立计算。
  • ORDER BY 子句也是可选的,用于指定结果集中值的排序方式。

如果没有最后一个值存在,函数将返回 NULL

实例

获取分区内的最后一个值

CREATE TABLE sales (id INT, `year` INT, amount DECIMAL(10,2));
INSERT INTO sales VALUES (1, 2018, 1000.00), (2, 2019, 1500.00), (3, 2019, 2000.00);

SELECT `year`, LAST_VALUE(amount) OVER (PARTITION BY `year` ORDER BY id) AS last_sale FROM sales;

输出结果为:

+------+-----------+
| year | last_sale |
+------+-----------+
| 2018 |   1000.00 |
| 2019 |   1500.00 |
| 2019 |   2000.00 |
+------+-----------+

在没有分区的情况下使用

SELECT id, LAST_VALUE(amount) OVER (ORDER BY id) AS last_sale
FROM sales;

输出结果为:

+----+-----------+
| id | last_sale |
+----+-----------+
|  1 |   1000.00 |
|  2 |   1500.00 |
|  3 |   2000.00 |
+----+-----------+

结合变量使用

DELETE FROM sales WHERE id=1 AND LAST_VALUE(@last_id:=id, @last_amount:=amount, 1);
SELECT @last_id, @last_amount;

输出结果为:

+----------+--------------+
| @last_id | @last_amount |
+----------+--------------+
|        1 |      1000.00 |
+----------+--------------+

作为窗口函数使用

SELECT id, LAST_VALUE(amount) OVER (ORDER BY id ROWS BETWEEN CURRENT ROW AND 1 FOLLOWING) AS next_sale
FROM sales;

输出结果为:

+----+-----------+
| id | next_sale |
+----+-----------+
|  1 |   1500.00 |
|  2 |   2000.00 |
|  3 |   2000.00 |
+----+-----------+

在更新操作中使用

UPDATE sales SET amount = LAST_VALUE(amount) OVER (ORDER BY id) WHERE year = 2019;
SELECT * FROM sales;

输出结果为:

+----+------+---------+
| id | year | amount  |
+----+------+---------+
|  1 | 2018 | 1000.00 |
|  2 | 2019 | 2000.00 |
|  3 | 2019 | 2000.00 |
+----+------+---------+

结论

LAST_VALUE() 函数在处理时间序列数据或需要按特定顺序分析数据时非常有用。它可以帮助我们快速找到每个分组或整个数据集的最后一个值,从而简化了许多复杂的查询操作。通过本文的实例,我们可以看到 LAST_VALUE() 函数在实际应用中的灵活性和便捷性。无论是进行数据分析还是优化数据库查询,LAST_VALUE() 都是一个非常有用的函数。[1^]