如何使用LAST_VALUE函数在SQL Server中查询分组后每组最后一条记录?
- 内容介绍
- 相关推荐
本文共计832个文字,预计阅读时间需要4分钟。
很多人看到 `LAST_VALUE` 就默认它像 `MAX()` 那样,能聚合出每组的最后一条记录,但实际上并非如此。`LAST_VALUE` 是一个窗口函数,它只会在当前窗口(frame)内找到最后一个值,并不等同于按某列排序后取每组的最后一行记录。直接使用它返回多列、带ID或时间戳的完整行数据,很大概率会出现错误或结果不符合预期。
为什么 LAST_VALUE 常常返回错误结果
典型陷阱是没设对 ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING —— 默认窗口帧是 ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW,导致 LAST_VALUE 实际返回的是“从开头到当前行”的最后一个值,而不是整组的最后一个。
本文共计832个文字,预计阅读时间需要4分钟。
很多人看到 `LAST_VALUE` 就默认它像 `MAX()` 那样,能聚合出每组的最后一条记录,但实际上并非如此。`LAST_VALUE` 是一个窗口函数,它只会在当前窗口(frame)内找到最后一个值,并不等同于按某列排序后取每组的最后一行记录。直接使用它返回多列、带ID或时间戳的完整行数据,很大概率会出现错误或结果不符合预期。
为什么 LAST_VALUE 常常返回错误结果
典型陷阱是没设对 ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING —— 默认窗口帧是 ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW,导致 LAST_VALUE 实际返回的是“从开头到当前行”的最后一个值,而不是整组的最后一个。

