db2 row_number() over( partition by col1 order by col2 ) 和关于fetch first n row only 的诡异

1.db2  row_number() over() 中 partition by  用于给结果集分组

seletc row_number() over(partition by log_user_id) as tmpid, o.* from ope_match_his_log o

partition by 用于给结果集分组,如果没有指定那么它把整个结果集作为一个分组,如果有它会根据指定字段进行分组并把分组中的多条记录显示,而且会对每个log_user_id的tmpid 进行排序。它和聚合函数不同的地方在于它能够返回一个分组中的多条记录,而聚合函数一般只有一个反映统计值的记录。

输出结果:

tmpid     ID        log_user_id

1        5613    111122222

2          5611111122222

3          5616    111122222

1          5654    345678900

2          5681    345678900

2. row_number() OVER (PARTITION BY COL1 ORDER BY COL2)

seletc row_number() over(partition by log_user_id  order by id desc) as tmpid, o.* from ope_match_his_log o

row_number() OVER (PARTITION BY COL1 ORDER BY COL2) 表示根据COL1分组,在分组内部根据 COL2排序。

输出结果:

tmpid     ID        log_user_id

1        5616    111122222

2          5613111122222

3          5611    111122222

1          5681    345678900

2          5654    345678900

3. row_number() over(order by col1) 再order by col1 输出结果

seletc row_number() over(order by id desc) as tmpid, o.* from ope_match_his_log o order by

执行结果

tmpid     ID           log_user_id

1        583206    13068

2          583205    21020

3          583204    21021

......

2604    580603    210201

2605    580602    210202

seletc row_number() over(order by id desc) as tmpid, o.* from ope_match_his_log o order by id asc

输出结果:

tmpid     ID           log_user_id

2605    580602    210202

2604    580603    210201

.......

3          583204    21021

2          583205    21020

1        583206    13068

经过两个输出结果:先进行over(order by id desc) 的排序,tmpid编号应经被分配,然后在进行order by id asc 排序后 timid 的编号也不会变了。


4.fetch first n row only 的诡异

在用db2 是发现个问题就是

select * from tablename order by column desc

select * from tablename order by column desc fetch first n row only

执行这两条sql的时候如果 order by column 中 column 存在重复的字段 fetch first n row only 会打乱

以前的排序,看一篇博客:网址:http://zhouchaofei2010.iteye.com/blog/2249684

说是“order by如果列有相同值就按物理顺序排的(即先插入的数据排在前面),但是 加了fetch first n rows only 后竟然改变了对查询结果的排序方式,在ordery by 字段值相同的时候,90% 以上的数据是按键值(这里是日期acdate)倒序排序的,永远取到日期acdate 最小的那几条条数据

博主也不知道是不是bug,我也不知道是什么原因,所以有知道的可以告诉我谢谢!



  • 3
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值