宁武皇仁光九年锦文轩刻本《异闻录》载: 扶桑画师浅溪,居泰安,喜绘鲤。院前一方荷塘,锦鲤游曳,溪常与嬉戏。 其时正武德之乱,潘镇割据,战事频仍,魑魅魍魉,肆逆于道。兵戈逼泰安,街邻皆逃亡,独溪不舍锦鲤,未去。 是夜,院室倏火。有人入火护溪,言其本鲤中妖,欲取溪命,却生情愫,遂不忍为之。翌日天明,火势渐歇,人已不见。 溪始觉如梦,奔塘边,但见池水干涸,莲叶皆枯,塘中鲤亦不知所踪。 自始至终,未辨眉目,只记襟上层迭莲华,其色魅惑,似血着泪。 后有青岩居士闻之,叹曰:魑祟动情,必作灰飞。犹蛾之投火耳,非愚,乃命数也。 ————《锦鲤抄》

【Oracle partition by 实现查询字段去重】

1.利用开窗函数可以实现字段分组去重,其中要注意几点:

  • 需要外套查询语句,不然无法识别ROWNUM ,也就是 row_number
  • 注意 分组排序方式(也可以说是分组维度, 根据某一字段去重其实就相当于根据某一字段分组),比如这里排序是 s_id 降序排列,以s_code 进行分组,如果有两行数据的 s_code 相同,那么rownum =1 的时候就 是只取第一组,即 s_id最大的那一行
select temp.* from(
select row_number()
               over(partition by S_CODE order by s_id desc) as row_number,s_id,s_code,s_name,AMOUNT
from TEST ) temp
where temp.row_number = 1
order by s_id;

 

2. 测试用例:

 查询SQL见上,查询结果如下:

可以见到,所有重复行都根据s_id取了最大的那一行,如果rownum = 2 就会递减,展示重复行用s_id 降序排列 后 剩下 的一批次,如图:

  

 3. 总结

   目前来说Oracle 用group by 可以分组,但是无法实现查询其余字段又单一字段去重(除非你的其余字段均为聚合函数,sum(xx)这种,结合 rownum() over (partition by ....) 使用来实现分组比较多见。

 

posted @ 2022-08-21 09:59  哒布溜  阅读(1162)  评论(0编辑  收藏  举报