如何在Oracle中按日期/账户/客户生成组内序号?
解决Oracle组内序号生成问题
问题分析
你遇到的核心问题是误用了ROW_NUMBER()的语法——仅指定排序条件却未添加**分区(PARTITION BY)**子句,导致生成全局连续序号而非组内独立序号。
正确SQL语句
要按date、account、client分组生成组内序号,需在ROW_NUMBER()中通过PARTITION BY定义分组维度,同时用ORDER BY指定组内排序逻辑(以下按Balance升序,匹配你的预期结果):
SELECT date, account, client, Balance, ROW_NUMBER() OVER (PARTITION BY date, account, client ORDER BY Balance) AS "Order" FROM your_table_name;
关键语法说明
PARTITION BY date, account, client:将数据集按这三个字段拆分为独立分组,每个分组内单独计算序号ORDER BY Balance:指定组内的排序依据,确保序号按Balance从小到大依次生成"Order"是Oracle关键字,作为列名时需用双引号包裹
执行结果验证
运行上述SQL后,将得到你预期的输出:
| date | account | client | Balance | Order |
|---|---|---|---|---|
| 01-Mar-23 | 1 | 1 | 1 | 1 |
| 01-Mar-23 | 1 | 1 | 2 | 2 |
| 01-Mar-23 | 2 | 1 | 1 | 1 |
| 01-Mar-23 | 2 | 2 | 3 | 1 |
| 01-Mar-23 | 2 | 2 | 4 | 2 |
| 01-Mar-23 | 2 | 2 | 5 | 3 |
| 01-Mar-23 | 3 | 1 | 3 | 1 |
内容的提问来源于stack exchange,提问作者Satya
相关产品推荐
相关产品推荐

