Sql 确保父记录的唯一性

Sql 确保父记录的唯一性,sql,oracle,Sql,Oracle,如何确保我在父记录上获得唯一性?我想每天统计mopid+用户数。我该怎么做?这是我到目前为止的代码,我只是对它在mopid+用户+日没有给我带来唯一性缺乏信心 SELECT TO_CHAR(MOPNOTES.MOPNOTEDATE, 'YYYY-MM-DD') DayWorked, MOPNOTES.MOPNOTEUSER, MOPNOTES.mopid, COUNT(*) AS DAILY FROM MOPUSER.MOPACTIVITY INNER JOIN MOPUSER.MOPNOT

如何确保我在父记录上获得唯一性?我想每天统计mopid+用户数。我该怎么做?这是我到目前为止的代码,我只是对它在mopid+用户+日没有给我带来唯一性缺乏信心

SELECT TO_CHAR(MOPNOTES.MOPNOTEDATE, 'YYYY-MM-DD') DayWorked, MOPNOTES.MOPNOTEUSER, MOPNOTES.mopid, COUNT(*) AS DAILY 
FROM MOPUSER.MOPACTIVITY 
INNER JOIN MOPUSER.MOPNOTES 
  ON MOPACTIVITY.MOPID=MOPNOTES.MOPID
WHERE MOPNOTES.MOPNOTEDATE > TO_DATE('01-JUL-13', 'DD-MON-YY') AND MOPNOTES.MOPNOTEDATE< TO_DATE('01-AUG-13', 'DD-MON-YY')
AND MOPACTIVITY.MOPSERVICEIMPACTED <> 'VOICE'
AND MOPACTIVITY.MOPSERVICEIMPACTED <> 'PWR/ENV'
AND (MOPNOTES.MOPNOTEUSER LIKE '%Ramesh%'
OR MOPNOTES.MOPNOTEUSER LIKE '%Saravanan%'
OR MOPNOTES.MOPNOTEUSER LIKE '%Boominathan%'
OR MOPNOTES.MOPNOTEUSER LIKE '%Srinivasan%'
OR MOPNOTES.MOPNOTEUSER LIKE '%Sathya%')
GROUP BY TO_CHAR(MOPNOTES.MOPNOTEDATE, 'YYYY-MM-DD'),MOPNOTES.MOPNOTEUSER,MOPNOTES.MOPID
ORDER BY TO_CHAR(MOPNOTES.MOPNOTEDATE, 'YYYY-MM-DD'),MOPNOTES.MOPNOTEUSER,MOPNOTES.MOPID
选择以_CHAR(MOPNOTES.MOPNOTEDATE,'yyyyy-MM-DD')日工作,MOPNOTES.MOPNOTEUSER,MOPNOTES.mopid,计数(*)为每日
来自MOPUSER.MOPACTIVITY
内部连接MOPUSER.MOPNOTES
关于MOPACTIVITY.MOPID=MOPNOTES.MOPID
其中MOPNOTES.MOPNOTEDATE>截止日期('2013年7月1日','2013年1月1日')和MOPNOTES.MOPNOTEDATE<截止日期('2013年8月1日','2013年1月1日')
和MOPACTIVITY.MOPSERVICEIMPACTED'VOICE'
和MOPACTIVITY.MOPSERVICEIMPACTED'PWR/ENV'
和(MOPNOTES.MOPNOTEUSER,如“%Ramesh%”
或MOPNOTES.MOPNOTEUSER,如“%Saravanan%”
或MOPNOTES.MOPNOTEUSER,如“%b%”
或MOPNOTES.MOPNOTEUSER,如“%Srinivasan%”
或MOPNOTES.MOPNOTEUSER,如“%Sathya%”)
分组依据TO_CHAR(MOPNOTES.MOPNOTEDATE,'yyyyy-MM-DD')、MOPNOTES.MOPNOTEUSER、MOPNOTES.MOPID
订购人:TO_CHAR(MOPNOTES.MOPNOTEDATE,'yyyyy-MM-DD')、MOPNOTES.MOPNOTEUSER、MOPNOTES.MOPID

根据定义,“分组依据”将为每个按分组的列组合提供唯一的行。因为您是按mopid+user+day分组的,所以在mopid+user+day上具有唯一性

SELECT TO_CHAR(MOPNOTES.MOPNOTEDATE, 'YYYY-MM-DD') DayWorked, MOPNOTES.MOPNOTEUSER, MOPNOTES.mopid, COUNT(*) AS DAILY 
FROM MOPUSER.MOPACTIVITY 
INNER JOIN MOPUSER.MOPNOTES 
  ON MOPACTIVITY.MOPID=MOPNOTES.MOPID
WHERE MOPNOTES.MOPNOTEDATE > TO_DATE('01-JUL-13', 'DD-MON-YY') AND MOPNOTES.MOPNOTEDATE< TO_DATE('01-AUG-13', 'DD-MON-YY')
AND MOPACTIVITY.MOPSERVICEIMPACTED <> 'VOICE'
AND MOPACTIVITY.MOPSERVICEIMPACTED <> 'PWR/ENV'
AND (MOPNOTES.MOPNOTEUSER LIKE '%Ramesh%'
OR MOPNOTES.MOPNOTEUSER LIKE '%Saravanan%'
OR MOPNOTES.MOPNOTEUSER LIKE '%Boominathan%'
OR MOPNOTES.MOPNOTEUSER LIKE '%Srinivasan%'
OR MOPNOTES.MOPNOTEUSER LIKE '%Sathya%')
GROUP BY TO_CHAR(MOPNOTES.MOPNOTEDATE, 'YYYY-MM-DD'),MOPNOTES.MOPNOTEUSER,MOPNOTES.MOPID
ORDER BY TO_CHAR(MOPNOTES.MOPNOTEDATE, 'YYYY-MM-DD'),MOPNOTES.MOPNOTEUSER,MOPNOTES.MOPID
为了举例说明,此查询:

SELECT a, b
FROM ( SELECT MOD(LEVEL, 2) a, MOD(LEVEL, 4) b FROM DUAL CONNECT BY LEVEL < 11 )
GROUP BY a, b
SELECT DISTINCT a, b
FROM ( SELECT MOD(LEVEL, 2) a, MOD(LEVEL, 4) b FROM DUAL CONNECT BY LEVEL < 11 )

mopid是父表的唯一记录,也在子记录中,但不是唯一的。