【发布时间】:2021-03-02 02:39:47
【问题描述】:
具体来说,我是一个测试数据表,我试图在其中为每个学生和每个会话(即秋季、冬季、春季)选择一行数据。问题是有一些学生在同一个会话中重新参加了考试,我希望我的查询能够处理这些事件。
假设一个学生(学生 ID = 12345)在秋季参加了 两次 考试 - 一次是在 9 月 23 日,成绩为 85/100,然后在 10 月 3 日再次参加考试,成绩为75/100。我想知道两个不同的查询,一个用于处理以下各项:
- 返回他们最近的测试(即 10 月 3 日的测试)所在的行
- 返回他们得分最高的测试的行(即从 9 月 23 日开始的测试)
这是一个类似于我正在使用的表格的示例:
| studentid | session | testdate | score | schoolyear |
-----------------------------------------------------------
| ...
| 42532 | Fall | '2020-10-01' | 68 | '2020-2021'
| 42532 | Winter | '2021-02-02' | 70 | '2020-2021'
| 12345 | Fall | '2020-09-23' | 85 | '2020-2021' <--- (this student has two records for the fall)
| 12345 | Fall | '2020-10-03' | 75 | '2020-2021' <---
| 12345 | Winter | '2021-01-10' | 79 | '2020-2021'
| 83456 | Fall | '2020-09-08' | 90 | '2019-2020'
| 83456 | Winter | '2021-01-18' | 83 | '2019-2020'
| ...
所以我想运行类似于以下的查询:
SELECT studentid, session, testdate, score
FROM exam_result
WHERE schoolyear = '2020-2021'
-- (something to filter out the multiples)
对于所有学生,每个学生 AND 会话返回 1 行 任何帮助将不胜感激!
【问题讨论】:
-
编辑您的问题并显示您想要的结果。
标签: sql postgresql aggregate