[英]SQL : select minimum value AND other values in the row with the minimum
我想使用Oracle SQL根據參加考試的時間來選擇一組人員的ID,考試日期和考試結果。 我的問題是優先順序不是按時間順序排列的。 我想在1年中選擇一個日期。如果他們在1年中沒有日期,我想要3年中的日期。如果他們沒有1或3年,我想要2年中的日期。
我使用了一個case函數來創建一個變量(check1),以根據進行測試的年份的優先級為每行分配一個值。 因此,所有行在check1列中都有1、2或3。 (1是最高優先級,3是最低優先級。)
我知道有多少人使用以下方法進入每個組:
SELECT ID, MIN(check1)
FROM datatable
GROUP BY ID;
這是我的問題:我還需要他們參加考試的日期,以便我可以將正確的考試結果加入到希望的日期。 當我嘗試將日期添加到上一個功能時:
SELECT ID, MIN(check1), date
FROM datatable
GROUP BY ID;
Oracle錯誤,因為日期變量不在GROUP BY函數中。 但是,當我按功能將日期放入分組時,它將選擇所有記錄,而不僅僅是min(check1)。
如何獲得每人要選擇日期的行?
提前致謝!!
通常,最快的方法是相關子查詢:
SELECT t.*
FROM datatable t
WHERE t.date = (SELECT MIN(t2.check1) FROM datatable t2 WHERE t2.id = t.id);
或者,使用KEEP
進行聚合:
select id, min(check1), min(date) keep (dense_rank first order by check1 asc) as date
from datatable t
group by id;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.