Oracle 19c编写SELECT查询获取每组最新账户记录
Oracle 19c 查询每组最新账户编号的解决方案
问题分析
你的数据里,同组账户的Previous Number字段值一致,新账户创建时会继承所属组的Previous Number。现在需要从Previous Number为4、6、9的三个组里,分别取出每组的最新账户编号。默认假设Account Number是按创建顺序递增分配的,编号最大的即为最新账户。
方案一:使用窗口函数(灵活适配不同排序规则)
如果后续需要调整最新行的判断规则(比如按创建时间排序),用窗口函数更方便:
SELECT account_number FROM ( SELECT account_number, previous_number, -- 按组分区,账户编号降序排序,每组第一行就是最新的 ROW_NUMBER() OVER (PARTITION BY previous_number ORDER BY account_number DESC) AS row_rank FROM your_table_name -- 只筛选目标组 WHERE previous_number IN (4, 6, 9) ) ranked_data WHERE row_rank = 1;
方案二:使用GROUP BY取最大值(简洁高效)
如果确定每组内Account Number最大的就是最新账户,直接用分组聚合更高效:
SELECT previous_number AS 组标识, MAX(account_number) AS 最新账户编号 FROM your_table_name WHERE previous_number IN (4, 6, 9) GROUP BY previous_number;
注意事项
- 把代码里的
your_table_name替换成你实际使用的表名 - 如果最新行的判断不是基于
Account Number(比如有专门的创建时间字段),只需修改排序字段即可。比如用窗口函数时,把ORDER BY account_number DESC改成ORDER BY create_date DESC(假设创建时间字段是create_date)
内容的提问来源于stack exchange,提问作者vnkotak
相关产品推荐
相关产品推荐

