首页 > 数据库 >【Oracle partition by 实现字段去重】

【Oracle partition by 实现字段去重】

时间:2022-08-21 10:12:33浏览次数:53  
标签:partition number 字段 分组 Oracle id row

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 ....) 实现分组居多。

 

标签:partition,number,字段,分组,Oracle,id,row
From: https://www.cnblogs.com/dabuliu/p/16602531.html

相关文章

  • python获取返回的json中的某个字段值的函数
    响应报文的json一般为字典或者是列表嵌套字段的形式     defget_json_value(a,k,l:list):""":parama:传入的数据:paramkey:获取哪个字段值......
  • decode,instr之oracle转pg
    oracle的decode函数:1.含义解释:decode(条件,值1,返回值1,值2,返回值2,...值n,返回值n,缺省值);decode(字段或字段的运算,值1,值2,值3);这个函数运行的结果是,当字段或字段的运......
  • 让人纠结的PG字段json类型
    PostgreSQL确实牛逼得很。PostgreSQL有个json数据类型。当你用json类型设定表的字段时,你用select语句相当爽。问题是当你使用中间件时如FireDAC等,进行数据保存时,就会出现......
  • ES按照时间分组,且可将时间字段“格式化”后再分组
    需求:需要按照一个时间比如createTime进行分组,且只取精确到分钟后进行分组,例如createTime="2022-08-1914:31:59",分组时按照createTime="2022-08-1914:31"分组解决方案1......
  • django model设置SQL表注释和字段注释
    过修改django配置文件,将model里面的的verbose_name作为数据库的COMMENT,也就是注释信息。第一步:找到如下路径:  注意:如果你是在虚拟环境下搭建的项目,注意到虚拟环境下......
  • php+sql 从一张表中查询出来的字段值添加到另一张的表中以及批量循环添加数据
    $message=$result['message'];//$ware_house_name=array_column($message,'WarehouseCode');//$ware_house_name=array_unique($ware_house_name);//$new_array=a......
  • [Oracle] LeetCode 848. Shifting Letters
    YouaregivenastringsoflowercaseEnglishlettersandanintegerarrayshiftsofthesamelength.Calltheshift()ofaletter,thenextletterinthealph......
  • Oracle 解决【ORA-01704:字符串文字太长】
    错误提示:oracle在toad中执行一段sql语句时,出现错误‘ORA-01704:字符串文字太长’。如下图:原因:一般为包含有对CLOB字段的数据操作。如果CLOB字段的内容非常大的时候,会导致S......
  • 属性与字段的思考
    字段私有属性公有自动属性封装了字段属性的唯一好处就是简化了代码,但是这破坏了的封装体现程序封装的最好办法就是只定义字段,然后手写get,set方法;自我思考:但是对于Mod......
  • Dockers安装Oracle 11g
    1,下载Oracle镜像dockerpullregistry.cn-hangzhou.aliyuncs.com/helowin/oracle_11g 2,启动容器dockerrun-d-p1521:1521--nameoracleregistry.cn-hangzh......