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')
我不是 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')