ORACLE SQL组,但仍提供重复项
我已经为此工作了一整天 下面的查询返回大约162000条记录。其中少数是复制品 真的,我不知道如何排除故障 此数据库从我只有读取权限的外部数据库中提取 例如,如果我有两行ORACLE SQL组,但仍提供重复项,sql,oracle,group-by,duplicates,Sql,Oracle,Group By,Duplicates,我已经为此工作了一整天 下面的查询返回大约162000条记录。其中少数是复制品 真的,我不知道如何排除故障 此数据库从我只有读取权限的外部数据库中提取 例如,如果我有两行 20684 2019年2月26日上午11:13:04阿布拉123 abc 6阿布拉 20690 2019年2月26日上午11:13:04阿布拉123 abc 6阿布拉 我想保留20684 abra 123 abc 6 abra 20684是唯一的I.INCIDENTID,不包括在GROUP BY中` 请帮忙 SELECT
20684 2019年2月26日上午11:13:04阿布拉123 abc 6阿布拉
20690 2019年2月26日上午11:13:04阿布拉123 abc 6阿布拉
我想保留20684 abra 123 abc 6 abra
20684是唯一的
I.INCIDENTID,不包括在
GROUP BY中`
请帮忙
SELECT TO_CHAR(MIN(I.INCIDENTID)) AS "Incident ID",
I.CREATIONDATE AS "Creation Date",
M.MESSAGESUBJECT AS "Email Subject",
MO.IPADDRESS AS "IP Address",
MO.DOMAINUSERNAME AS "Login ID",
MO.ENDPOINTMACHINENAME AS "Computer Name"
FROM MESSAGE M
LEFT JOIN INCIDENT I
ON M.MESSAGESOURCE = I.MESSAGESOURCE
AND M.MESSAGEID = I.MESSAGEID
AND M.MESSAGEDATE = I.MESSAGEDATE
LEFT JOIN MESSAGEORIGINATOR MO
ON M.MESSAGEORIGINATORID = MO.MESSAGEORIGINATORID
LEFT JOIN MESSAGEEXT ME
ON ME.MESSAGEID = M.MESSAGEID
LEFT JOIN INCIDENTSTATUS S
ON S.INCIDENTSTATUSID = I.INCIDENTSTATUSID
LEFT JOIN CUSTOMATTRIBUTESRECORD C
ON C.CUSTOMATTRIBUTESRECORDID = I.CUSTOMATTRIBUTESRECORDID
GROUP BY I.CREATIONDATE,
M.MESSAGESUBJECT,
MO.IPADDRESS,
MO.DOMAINUSERNAME,
MO.ENDPOINTMACHINENAME
如果CREATIONDATE是一种日期数据类型,则它包含时间元素,精确到秒。您要查找的最低事件Id不太可能有准确的时间。将日期格式化为ISO日期,分组依据将忽略时间差
SELECT TO_CHAR(MIN(I.INCIDENTID)) AS "Incident ID",
to_char(I.CREATIONDATE, 'yyyy-mm-dd') AS "Creation Date",
M.MESSAGESUBJECT AS "Email Subject",
MO.IPADDRESS AS "IP Address",
MO.DOMAINUSERNAME AS "Login ID",
MO.ENDPOINTMACHINENAME AS "Computer Name"
FROM MESSAGE M
LEFT JOIN INCIDENT I
ON M.MESSAGESOURCE = I.MESSAGESOURCE
AND M.MESSAGEID = I.MESSAGEID
AND M.MESSAGEDATE = I.MESSAGEDATE
LEFT JOIN MESSAGEORIGINATOR MO
ON M.MESSAGEORIGINATORID = MO.MESSAGEORIGINATORID
LEFT JOIN MESSAGEEXT ME
ON ME.MESSAGEID = M.MESSAGEID
LEFT JOIN INCIDENTSTATUS S
ON S.INCIDENTSTATUSID = I.INCIDENTSTATUSID
LEFT JOIN CUSTOMATTRIBUTESRECORD C
ON C.CUSTOMATTRIBUTESRECORDID = I.CUSTOMATTRIBUTESRECORDID
GROUP BY to_char(I.CREATIONDATE, 'yyyy-mm-dd')
M.MESSAGESUBJECT,
MO.IPADDRESS,
MO.DOMAINUSERNAME,
MO.ENDPOINTMACHINENAME
那么你很可能错过了某个地方。这里没有人能帮你解决这个问题。使用过时的联接语法没有帮助。请参见此处如何定义“重复”@jnevil行是重复的,即第一行有
abra 123 abc 6 abra
,第二行也有abra 123 abc 6 abra
,如果即使在其周围放置MIN()
,且未将其包括在分组依据中,您仍然会得到重复的,那么,您的组中必须至少有一列与您标识为重复的两条记录不同。您在其中有许多字符串列,看起来它们可能作为自由文本输入。请记住,不同的大小写或不可见字符(如尾随空格、bell
等)仍然会在GROUP BY子句中产生差异。我尝试过,得到了更多的重复字符。我也尝试了ltrim(rtrim(to_char(I.CREATIONDATE,'yyyyy-mm-dd'))
,但没有效果:-(我将此标记为答案,因为它将帮助大多数人。但是我仍在努力。我相信这与许多领域中的NULL
有关,我仍在进行故障排除。TRIM(I.CREATIONDATE)
(为了给出独特的结果)@Marium如果您从右表中查找最小值,那么消息和事件之间的连接应该是内部的,而不是外部的?