如何调整窗口函数使每行返回分组内的最大ROW_NUMBER值?
解决方法
你可以直接用COUNT(*) OVER(PARTITION BY ddr.number)替代原有的ROW_NUMBER窗口函数,这样就能在分组内的每一行返回该分组的总行数(也就是你需要的最大行号),完全无需子查询,仅通过窗口函数实现:
COUNT(*) OVER(PARTITION BY ddr.number) max_row_number
原理说明
COUNT(*)搭配窗口函数时,仅指定PARTITION BY子句会统计每个分组内的总行数,这个数值恰好等于该分组内ROW_NUMBER()生成的最大行号(因为ROW_NUMBER从1开始连续递增到分组总行数)。- 这里不需要额外的
ORDER BY子句,因为我们只需要统计分组总数量,和排序逻辑无关。
如果一定要基于原有的ROW_NUMBER逻辑推导,也可以通过嵌套窗口函数实现,但这种写法不如COUNT简洁高效:
MAX(ROW_NUMBER() OVER(PARTITION BY ddr.number ORDER BY ddr.date)) OVER(PARTITION BY ddr.number) max_row_number
内容的提问来源于stack exchange,提问作者shazma
相关产品推荐
相关产品推荐

