如何使用LAST_VALUE函数在SQL Server中查询分组后每组最后一条记录?

2026-05-07 12:220阅读0评论SEO资源
  • 内容介绍
  • 相关推荐

本文共计832个文字,预计阅读时间需要4分钟。

如何使用LAST_VALUE函数在SQL Server中查询分组后每组最后一条记录?

很多人看到 `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函数在SQL Server中查询分组后每组最后一条记录?

很多人看到 `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 实际返回的是“从开头到当前行”的最后一个值,而不是整组的最后一个。

阅读全文