2016-08-06 68 views
2

我需要在我的RESULT列中找到最低編號,我知道可以用MIN完成,但我不知道如何執行此操作以及如何選擇其他列。我的代碼顯示所有成員的所有結果,但我只希望它顯示最佳結果(最低數字)以及該成員的其他詳細信息。從列中選擇最低編號並顯示其他列

現在我有一個看起來像這樣多個條目:

EVENT_ID EVENT_TYPE EVENT_NAME MEMBER_ID MEMBER_FIRSTNAME MEMBER_LASTNAME RESULT 
event1  track  100M  0001  John    Smith   11.3 

我只需要選擇具有最低結果行和只顯示一個。這是我到目前爲止的代碼:

SELECT E.EVENT_ID, E.EVENT_TYPE, E.EVENT_NAME, R.MEMBER_ID, M.MEMBER_FIRSTNAME, M.MEMBER_LASTNAME, R.RESULT 
FROM EVENT E, MEMBER M, RANK R 
WHERE E.EVENT_ID = R.EVENT_ID 
AND R.MEMBER_ID = M.MEMBER_ID; 

SGEDDES - 我試圖按照您的最後一個方法,並不能得到它的工作:

SELECT E.EVENT_ID, E.EVENT_TYPE, E.EVENT_NAME, R.MEMBER_ID, M.MEMBER_FIRSTNAME, M.MEMBER_LASTNAME, R.RESULT 
FROM (EVENT E, MEMBER M, RANK R 
WHERE E.EVENT_ID = R.EVENT_ID 
AND R.MEMBER_ID = M.MEMBER_ID; 
ORDER BY RESULT) 
WHERE ROWNUM = 1; 
+0

https://docs.oracle.com/cd/B19306_01/server.102/b14200/functions137.htm使用ROW_NUMBER函數來確定要在cte或嵌套查詢中查找哪些記錄,然後選擇ROW_NUMBER = 1的位置。我會盡力向你展示,但是當你說你想要最低的結果是每個事件,每個成員,每個組合它們的關閉或? – Matt

+0

你運行的是什麼版本的oracle? – sgeddes

+0

@sgeddes Oracle Application Express 3.2.1.00.12 –

回答

1

下面是使用row_number一個選項(也請注意join語法 - 一般來說,你不應該在from子句中使用逗號):

SELECT * 
FROM (
    SELECT E.EVENT_ID, E.EVENT_TYPE, E.EVENT_NAME, 
     R.MEMBER_ID, M.MEMBER_FIRSTNAME, M.MEMBER_LASTNAME, R.RESULT, 
     row_number() over (order by R.RESULT) rn 
    FROM EVENT E JOIN RANK R ON E.EVENT_ID = R.EVENT_ID 
     JOIN MEMBER M ON R.MEMBER_ID = M.MEMBER_ID 
) t 
WHERE rn = 1 

如果您需要按特定字段對結果進行分組,您可以使用partition by。例如:

row_number() over (partition by e.event_id order by result) rn 

,這裏是用另一種選擇rownum

SELECT * 
    FROM (<<YOUR QUERY HERE>> ORDER BY R.Result) 
WHERE ROWNUM = 1; 
+0

我試過你的最後一個方法,無法讓它工作。我編輯了我的問題以顯示我使用的代碼。 –

0

在最新版本的Oracle,你可以使用fetch first 1 row only

SELECT E.EVENT_ID, E.EVENT_TYPE, E.EVENT_NAME, R.MEMBER_ID, 
     M.MEMBER_FIRSTNAME, M.MEMBER_LASTNAME, R.RESULT 
FROM EVENT E JOIN 
    RANK R 
    ON E.EVENT_ID = R.EVENT_ID JOIN 
    MEMBER M 
    ON R.MEMBER_ID = M.MEMBER_ID 
ORDER BY R.RESULT 
FETCH FIRST 1 ROW ONLY; 

如果你有一個不太新的版本的Oracle,那麼sgeddes的一個解決方案就沒有問題。

+0

「SQL命令未正確結束」。我喜歡這種方法有沒有辦法做到這一點沒有最後一行? WHERE ROWNUM = 1;不起作用。 –

+0

@JameB。 。 。如果您的Oracle版本比12c早,則使用sgeddes建議的解決方案。 –

相關問題