DISTINCT 在 Oracle 中返回重复行

DISTINCT is returning duplicate rows in Oracle

我不是 SQL 专业人士。我在我的 SELECT 语句中使用了所有列,并且也在 GROUP BY 中使用了它们。但是,我得到了重复的记录。然后我将 DISTINCT 添加到我的查询中,但我仍然得到重复的记录。我在这里做错了什么?

SELECT DISTINCT 
        action_by_id
       ,a.status_cd
       ,owner_dsply_nm                      AS "CASE OWNER"
       ,case_intrl_id                       AS "CASE ID"
       ,status_nm                           AS "STATUS VALUE"
       ,action_ts                           AS "STATUS CHANGE DATE"
       ,To_char(action_ts - 7 / 24, 'IYYY') AS "STATUS CHANGE YEAR" 
       ,To_char(action_ts - 7 / 24, 'IW')   AS "STATUS CHANGE WEEK" 
FROM   kdd_case_actions a 
       join kdd_status  s 
         ON a.status_cd = s.status_cd 
       join kdd_review_owner r
         ON r.owner_seq_id = a.action_by_id
WHERE  a.status_cd NOT IN ( 'SBTMNEW', 'NW', 'SB01NEW' ) 
GROUP  BY To_char(action_ts - 7 / 24, 'IYYY') 
          ,To_char(action_ts - 7 / 24, 'IW') 
          ,action_ts
          ,case_intrl_id 
          ,status_nm
          ,owner_dsply_nm
          ,action_by_id
          ,a.status_cd

如果您的 action_ts 列是时间戳或日期,您只能在用户界面中看到它的一部分。 我想如果您打印得更详细一些,您会发现该列的各行具有不同的值。

您的查询中没有聚合函数,为什么要使用 group by .. 只使用 distinct
并确保您只获得 action_ts 的日期部分,最后确保您有 space 的适当修剪字符串或不可见的字符

    SELECT DISTINCT 
            action_by_id
           ,trim(a.status_cd)
           ,trim(owner_dsply_nm)                      AS "CASE OWNER"
           ,case_intrl_id                       AS "CASE ID"
           ,trim(status_nm )                         AS "STATUS VALUE"
           ,to_char(action_ts, 'DD.MON.YYYY')    AS "STATUS CHANGE DATE"
           ,To_char(action_ts - 7 / 24, 'IYYY') AS "STATUS CHANGE YEAR" 
           ,To_char(action_ts - 7 / 24, 'IW')   AS "STATUS CHANGE WEEK" 
    FROM   kdd_case_actions a 
    join kdd_status  s ON a.status_cd = s.status_cd 
    join kdd_review_owner r ON r.owner_seq_id = a.action_by_id
    WHERE  a.status_cd NOT IN ( 'SBTMNEW', 'NW', 'SB01NEW' ) 


    TO_DATE (action_ts, 'DD.MON.YYYY')