SQL:使用最小值选择行中的最小值和其他值



使用Oracle SQL,我想根据测试何时选择一组人的ID,测试日期和测试结果。我的问题是,优先顺序不是按时间顺序排列的。我想在第1年中选择一个日期,如果他们在第一年没有的日期,我想要3年的日期。如果他们没有1或3,我想要第2年的日期。

我使用案例函数来创建一个变量(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错误,因为日期变量不在组中。但是,当我按功能将日期放在组中时,它会选择所有记录,而不仅仅是最小记录(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;

相关内容

最新更新