SQL : select 最小值和具有最小值的行中的其他值
SQL : select minimum value AND other values in the row with the minimum
使用 Oracle SQL,我想 select 一组人的 ID、测试日期和基于测试时间的测试结果。我的问题是优先顺序不是按时间顺序排列的。我想 select 1 年的日期。如果他们在 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 错误,因为日期变量不在 GROUP BY 函数中。但是,当我按函数将日期放入组中时,它 select 是所有记录,而不仅仅是 min(check1)。
如何将它设置为 select 每人一行,并显示我想要的日期?
提前致谢!!
通常,最快的方法是相关子查询:
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;
使用 Oracle SQL,我想 select 一组人的 ID、测试日期和基于测试时间的测试结果。我的问题是优先顺序不是按时间顺序排列的。我想 select 1 年的日期。如果他们在 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 错误,因为日期变量不在 GROUP BY 函数中。但是,当我按函数将日期放入组中时,它 select 是所有记录,而不仅仅是 min(check1)。
如何将它设置为 select 每人一行,并显示我想要的日期?
提前致谢!!
通常,最快的方法是相关子查询:
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;