数据排序后进oracle,相邻行值相同就进行排序从1开始,发生变化后从新进行排序,求高手帮忙...

SQL> with t(value,id) as (

2                        select 1 value ,1 id from dual union all

3                        select 1 value ,2 id from dual union all

4                        select 1 value ,3 id from dual union all

5                        select 1 value ,4 id from dual union all

6                        select -1 value ,5 id from dual union all

7                        select -1  value ,6 id from dual union all

8                        select -1 value ,7 id from dual union all

9                        select -1 value ,8 id from dual union all

10                        select 1 value ,9 id from dual union all

11                        select -1 value ,10 id from dual union all

12                        select -1 value ,11 id from dual union all

13                        select 1 value ,12 id from dual union all

14                        select -1 value ,13 id from dual

15                      )

16  select id,

17         value,

18         row_number() over(partition by group_id order by id) result

19    from (select id, value, sum(start_value) over(order by id) group_id

20            from (select id,value, lag_value,

21                         case  when id = 1 or id > 1 and value != lag_value then 1 else 0 end start_value

22                    from (select id,

23                                 value,

24                                 lag(value) over(order by id) lag_value

25                            from t)

26                  )

27          )

ID      VALUE     RESULT

---------- ---------- ----------

1          1          1

2          1          2

3          1          3

4          1          4

5         -1          1

6         -1          2

7         -1          3

8         -1          4

9          1          1

10         -1          1

11         -1          2

12          1          1

13         -1          1

13 rows selected

SQL>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值