【发布时间】: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