【问题标题】:SQL : select minimum value AND other values in the row with the minimumSQL:在具有最小值的行中选择最小值和其他值
【发布时间】:2019-08-05 21:19:21
【问题描述】:

使用 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)。

如何让每人选择一行我想要的日期?

提前致谢!!

【问题讨论】:

  • 假设您只想要结果中的最新日期,您可以获得 MAX(date)

标签: sql oracle groupwise-maximum


【解决方案1】:

通常,最快的方法是关联子查询:

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;

【讨论】:

    猜你喜欢
    • 2020-07-23
    • 2017-12-17
    • 1970-01-01
    • 2021-01-03
    • 1970-01-01
    • 1970-01-01
    • 2020-05-16
    • 2014-12-01
    • 2018-08-24
    相关资源
    最近更新 更多