1

重複が発生するのはなぜですか? 単純なようですが、私の分厚い頭蓋骨を通り抜けることはできません。

SELECT MOPACTIVITY.MOPID STRICT,
    TO_CHAR(MOPNOTES.MOPNOTEDATE, 
              'yyyy-mm-dd hh24:mi') "MOPNOTEDATE"
FROM MOPUSER.MOPACTIVITY
   INNER JOIN MOPUSER.MOPNOTES 
       ON MOPACTIVITY.MOPID=MOPNOTES.MOPID

親レコードに子レコードを 1 つだけ取得し、子レコードが MOPNOTES.MOPNOTEDATE による最新のレコードになるようにするにはどうすればよいですか?

4

4 に答える 4

2

コメントすると、質問が大幅に変わります。ここで分析関数を使用します。次に例を示します。

SELECT ma.MOPID as STRICT,
       TO_CHAR(mn.MOPNOTEDATE, 'yyyy-mm-dd hh24:mi') as "MOPNOTEDATE"
FROM MOPUSER.MOPACTIVITY ma INNER JOIN
     (select mn.*,
             MAX(mn.MOPNOTEDATE) over (partition by mn.MOPID ) as maxMOPNOTEDATE
      from MOPUSER.MOPNOTES mn
     ) mn
    ON ma.MOPID = mn.MOPID and ma.MOPNOTEDATE = mn.maxMOPNOTEDATE;

max()withを使用するとover、これが分析関数になります。これは、それぞれの最大値を取得していますMOPID。このon句は、最大値に一致するレコードを選択するだけです。

同じ最新のタイム スタンプを持つ重複がある場合は、すべてが含まれることに注意してください。

于 2013-06-07T19:05:45.370 に答える