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() 函数时,需要注意指定分组、排序和窗口大小等参数,以确保获取正确的结果。