簡體   English   中英

SQL:選擇最小值和行中具有最小值的其他值

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM