为什么我会重复?看起来很简单,但它不是通过我厚厚的头骨。
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
如何通过MOPNOTES.MOPNOTEDATE只向父母提供一条儿童记录,并将儿童记录作为最新记录?
答案 0 :(得分:3)
如果您只需要MOPNOTES
中的那些列,那么应该这样做:
SELECT MOPACTIVITY.MOPID STRICT,
TO_CHAR(MN.MOPNOTEDATE,
'yyyy-mm-dd hh24:mi') "MOPNOTEDATE"
FROM MOPUSER.MOPACTIVITY
INNER JOIN (SELECT MOPID, MAX(MOPNOTEDATE) AS "MOPNOTEDATE"
FROM MOPUSER.MOPNOTES
GROUP BY MOPID) MN
ON MOPACTIVITY.MOPID=MN.MOPID
答案 1 :(得分:3)
尝试分组,并使用最大值:
SELECT MOPACTIVITY.MOPID STRICT,
TO_CHAR(max(MOPNOTES.MOPNOTEDATE), 'yyyy-mm-dd hh24:mi') "MOPNOTEDATE"
FROM MOPUSER.MOPACTIVITY
INNER JOIN MOPUSER.MOPNOTES ON MOPACTIVITY.MOPID=MOPNOTES.MOPID
GROUP BY MOPACTIVITY.MOPID
答案 2 :(得分: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()
与over
的使用使其成为一种分析功能。这是获得每个MOPID
的最大值。 on
子句只选择与最大值匹配的记录。
请注意,如果存在具有相同最新时间戳的重复项,则将包括所有重复项。
答案 3 :(得分:0)
SELECT
DISTINCT
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
尝试使用 Distinct 关键字。