Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
ORACLE SQL组,但仍提供重复项_Sql_Oracle_Group By_Duplicates - Fatal编程技术网

ORACLE SQL组,但仍提供重复项

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

我已经为此工作了一整天

下面的查询返回大约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 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如果您从右表中查找最小值,那么消息和事件之间的连接应该是内部的,而不是外部的?