You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Oracle如何按documentname列获取唯一值?SQL查询重复如何解决

Oracle按documentname列去重查询解决方案

问题说明

你当前使用的unique关键字是对所有查询列的组合整体去重,由于同一个documentname对应多个不同的processname值,所以无法实现仅按documentname单字段去重的效果。

优化后SQL语句

使用Oracle开窗函数ROW_NUMBER()按documentname分组排序,取每组第一条记录即可,你可以根据业务需求调整排序规则来选择保留哪条processname对应的记录:

SELECT documentname, projectname, documentdescription,
       P0BUSINESSUNIT, P0ZONENAME, P0REGIONNAME, P0GROUPNAME, 
       processname, ORIGINALCREATIONDATE
FROM (
    SELECT f.documentname, f.projectname, f.documentdescription,
           f.P0BUSINESSUNIT, f.P0ZONENAME, f.P0REGIONNAME, f.P0GROUPNAME, 
           l.processname, f.ORIGINALCREATIONDATE,
           -- 按documentname分组,组内排序规则可自定义,当前默认按processname正序取第一条
           ROW_NUMBER() OVER(PARTITION BY f.documentname ORDER BY l.processname) rn
    FROM p0findoc f, lcstep@sdrcpadm l 
    WHERE f.inlifecyclename IS NOT NULL 
      AND f.INLIFECYCLESTEP IN (SELECT l.LIFECYCLESTEP FROM lcstep@sdrcpadm ) 
      AND ORIGINALCREATIONDATE > '2021/01/01'
) t
WHERE rn = 1
ORDER BY P0BUSINESSUNIT, P0ZONENAME, P0REGIONNAME, P0GROUPNAME;

自定义调整说明

  • 如果你需要保留特定的processname记录,只需要修改ORDER BY l.processname部分的排序逻辑即可,比如要保留最新流程记录可以改成ORDER BY 对应的时间字段 DESC
  • 如果同一个documentname对应的非processname字段也存在差异,可根据业务需要调整分组逻辑或者排序优先级

内容的提问来源于stack exchange,提问作者Vaibhav Borse

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.23 17:54:04