SELECT
ass.assessmentAmount -- want to fetch assessmentAmount of min(ass.assessmentId)
ass.assessmentId
FROM
--bunch of joins
WHERE
ass.assessmentId = (SELECT min(ass2.assessmentId) FROM Assessment ass2
--same bunch of joins
Run Code Online (Sandbox Code Playgroud)
它看起来很混乱,因为我有 6 个带条件的连接,我不想重复两次。还有另一种方法可以做到这一点吗?
使用MIN( ass.assessmentId ) OVER ()解析函数:
SELECT *
FROM (
SELECT ass.assessmentAmount,
ass.assessmentId,
MIN( ass.assessmentId ) OVER () AS min_assessmentId
FROM --bunch of joins
)
WHERE assessmentId = min_assessmentId;
Run Code Online (Sandbox Code Playgroud)
您还可以使用RANK():
SELECT *
FROM (
SELECT ass.assessmentAmount,
ass.assessmentId,
RANK() OVER ( ORDER BY ass.assessmentId ) AS rnk
FROM --bunch of joins
)
WHERE rnk = 1;
Run Code Online (Sandbox Code Playgroud)
如果assessmentId是UNIQUE并且至少只能有一行,那么您可以替换RANK为ROW_NUMBER; 但是,您也可以使用伪列获得所需的结果ROWNUM:
SELECT *
FROM (
SELECT ass.assessmentAmount,
ass.assessmentId
FROM --bunch of joins
ORDER BY ass.assessmentId ASC
)
WHERE ROWNUM = 1;
Run Code Online (Sandbox Code Playgroud)