Oracle:如何重新启动row_number函数

3
我有这样一种情况,需要对按部门、分支机构、金额分组的数据进行行编号,并按日期排序。如果相同的部门和分支机构在某些日期后重复出现,则希望将行号设置为 1。请问如何实现?
我已经尝试使用 Row_number 函数,但是编号在某些日期后继续增长。
以下是示例数据:如果使用以下函数,则会得到行号:
`row_number() over(Partition by Department, Branch, Amount order by Date)`
但是我期望的输出顺序如下:
Department Branch Amount Date Row_number() Dep A Bran 1 51 25-Oct-12 1 Dep A Bran 1 45.5 26-Nov-12 1 Dep A Bran 1 45.5 05-Apr-13 2 Dep A Bran 1 45.5 06-May-13 3 Dep A Bran 1 65 07-May-13 1 Dep A Bran 1 51 26-Aug-13 1 Dep A Bran 1 51 11-Sep-13 2
请问有谁能帮我解决这个问题?
1个回答

1
你需要改变如何识别在哪些组内计算row_number()
例如:
SQL> with t (Department,  Branch,  Amount,  Date#)
  2  as (
  3  select 'Dep A',   'Bran 1',  51,  to_date('25-10-2012','DD-MM-YYYY') from dual union all
  4  select 'Dep A',  'Bran 1',  45.5,    to_date('26-11-2012','DD-MM-YYYY') from dual union all
  5  select 'Dep A',   'Bran 1',  45.5,    to_date('05-04-2013','DD-MM-YYYY') from dual union all
  6  select 'Dep A',   'Bran 1', 45.5,    to_date('06-05-2013','DD-MM-YYYY') from dual union all
  7  select 'Dep A',   'Bran 1',  65,  to_date('07-05-2013','DD-MM-YYYY') from dual union all
  8  select 'Dep A',   'Bran 1',  51,  to_date('26-08-2013','DD-MM-YYYY') from dual union all
  9  select 'Dep A',   'Bran 1',  51,  to_date('11-09-2013','DD-MM-YYYY') from dual
 10  )
 11  select department, branch, amount, date#, row_number() over(partition by grp order by date#) rn
 12  from (
 13  select department, branch, amount, date#, sum(st_grp) over(order by date#) grp from (
 14  select department, branch, amount, date#, case when amount = lag(amount,1,amount) over(order by date#) then 0 else 1 end st_grp from t
 15  )
 16  )
 17  order by date#
 18  /

DEPAR BRANCH     AMOUNT DATE#            RN                                     
----- ------ ---------- -------- ----------                                     
Dep A Bran 1         51 25.10.12          1                                     
Dep A Bran 1       45,5 26.11.12          1                                     
Dep A Bran 1       45,5 05.04.13          2                                     
Dep A Bran 1       45,5 06.05.13          3                                     
Dep A Bran 1         65 07.05.13          1                                     
Dep A Bran 1         51 26.08.13          1                                     
Dep A Bran 1         51 11.09.13          2 

你好,感谢提供的信息。这个查询语句适用于相同的部门和分支机构。如果分支机构或部门或两者都发生变化,您能告诉我如何修改查询吗? - user3383987

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接