我有以下查询:
SELECT P.ID,
(
SELECT F.VALUE_ID FROM FORM F
INNER JOIN F.PERSON_ID = P.ID
) AS LATEST_FORM
FROM FORM F1 INNER JOIN PERSON P
ON P.ID = F1.PERSON_ID
WHERE F1.NO_PCP_IND IS NOT NULL
ORDER BY P.ID
每个人都可以有多种形式,我只是想获得他们提交的最新表格。我尝试在子查询中使用ROWNUM,我理解为什么它不起作用但不确定如何使用Oracle生成正确的结果集。
答案 0 :(得分:2)
这是查询:
SELECT P.ID,
(SELECT F.VALUE_ID
FROM FORM F INNER JOIN
F.PERSON_ID = P.ID
) AS LATEST_FORM
FROM FORM F1 INNER JOIN
PERSON P
ON P.ID = F1.PERSON_ID
WHERE F1.NO_PCP_IND IS NOT NULL
ORDER BY P.ID;
除了在语法上不正确之外,如果它工作,这将为每个人和用户返回一行。我认为您的原始查询应该更像:
SELECT P.ID,
(SELECT F.VALUE_ID
FROM FORM F
WHERE F1.NO_PCP_IND IS NOT NULL AND F.PERSON_ID = P.ID AND
ROWNUM = 1
) AS LATEST_FORM
FROM PERSON P
ORDER BY P.ID;
这不能解决您的问题,因为您希望保留最后一个值。为此,请使用keep
功能:
SELECT P.ID,
(SELECT MAX(F.VALUE_ID) KEEP (DENSE_RANK FIRST ORDER BY XXX DESC)
FROM FORM F
WHERE F1.NO_PCP_IND IS NOT NULL AND F.PERSON_ID = P.ID
) AS LATEST_FORM
FROM PERSON P
ORDER BY P.ID;
在这种情况下,XXX
是用于定义每个人的表单顺序的列的名称。
答案 1 :(得分:0)
我相信它是ValueId
,它讲述了最新的表格
所以不会这么做吗?
SELECT max(F.VALUEID),P.ID
从表格F,PERSON P
其中F.PID = P.ID