SQL Server LAST_VALUE() 函数使用指南
LAST_VALUE()
函数是 SQL Server 中的一种窗口函数,用于在分组中获取最后一个值。该函数可以在 SELECT 语句中使用,以返回分组中每个行的最后一个值。 LAST_VALUE()
函数需要与 OVER 子句一起使用。
语法
LAST_VALUE()
函数的语法如下:
LAST_VALUE(expression) OVER (
[PARTITION BY partition_expression, ... ]
ORDER BY order_expression [ASC | DESC]
ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW
)
其中:
expression
:指定要返回最后一个值的列或表达式。PARTITION BY
:可选,指定要分组的列或表达式。ORDER BY
:指定对每个分组内的行排序的列或表达式。ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW
:指定窗口大小,用于计算每个行的最后一个值。
使用场景
LAST_VALUE()
函数通常用于在分组中获取最后一个值。例如,假设有一个包含订单历史记录的表,我们可以使用 LAST_VALUE()
函数获取每个订单的最终状态。此外, LAST_VALUE()
函数也可以用于处理时间序列数据,以获取每个时间段的最后一个值。
示例
示例 1
假设有一个名为 sales
的表,其中包含以下数据:
order_id | product_id | sales |
---|---|---|
1 | A | 100 |
2 | A | 200 |
3 | B | 300 |
4 | B | 400 |
5 | B | 500 |
我们可以使用 LAST_VALUE()
函数获取每个产品的最后一个销售额。下面是查询语句和结果:
SELECT DISTINCT
product_id,
LAST_VALUE(sales) OVER (PARTITION BY product_id ORDER BY order_id) AS last_sales
FROM sales;
查询结果:
product_id | last_sales |
---|---|
A | 200 |
B | 500 |
示例 2
假设有一个名为 stocks
的表,其中包含以下数据:
date | stock_code | price |
---|---|---|
2022-01-01 | A | 10 |
2022-01-02 | A | 20 |
2022-01-03 | A | 30 |
2022-01-01 | B | 5 |
2022-01-02 | B | 15 |
2022-01-03 | B | 25 |
我们可以使用 LAST_VALUE()
函数获取每个股票代码的最后一个价格。下面是查询语句和结果:
SELECT DISTINCT
stock_code,
LAST_VALUE(price) OVER (PARTITION BY stock_code ORDER BY date) AS last_price
FROM stocks;
查询结果:
stock_code | last_price |
---|---|
A | 30 |
B | 25 |
假设我们想要获取每个股票代码的最后一个价格和前一天的价格。为此,我们可以在 LAST_VALUE()
函数中添加 ROWS BETWEEN 子句,并将其设置为 UNBOUNDED PRECEDING 和 1 PRECEDING。这样,我们可以获取每个行的最后一个值和前一个值。下面是查询语句和结果:
SELECT DISTINCT
stock_code,
LAST_VALUE(price) OVER (PARTITION BY stock_code ORDER BY date ROWS BETWEEN UNBOUNDED PRECEDING AND 1 PRECEDING) AS prev_price,
LAST_VALUE(price) OVER (PARTITION BY stock_code ORDER BY date) AS last_price
FROM stocks;
查询结果:
stock_code | prev_price | last_price |
---|---|---|
A | NULL | 20 |
A | 20 | 30 |
B | NULL | 15 |
B | 15 | 25 |
在上面的查询结果中,我们可以看到每个股票代码的最后一个价格和前一天的价格。由于第一天没有前一天的价格,因此在 prev_price 列中显示了 NULL 值。
结论
LAST_VALUE()
函数是 SQL Server 中的一个有用工具,用于在分组中获取最后一个值。它可以帮助我们处理包含时间序列数据的表格,并查找每个时间段的最后一个值。在使用 LAST_VALUE()
函数时,需要注意指定分组、排序和窗口大小等参数,以确保获取正确的结果。