使用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;