### 以下数据结构,你如何查询某一日期或之前,学生在某年级的单科最新成绩分数,按学生姓名进行排正序取 10 条,请写 SQL 。在特定日期、每个学生在同一年级、同一学科只返回一条成绩数据。查询时,如果特定日期没有成绩数据,则需要返回这个日期之前的最新(离特定日期最近)成绩数据。
| 科目 | 年级 | 学生 | 成绩日期 | 成绩分数 |
| ---- | ---- | ---- | ---------- | ---- |
| 语文 | 1 | 张三 | 2015-01-03 | 100 |
| 语文 | 1 | 李四 | 2015-01-03 | 80 |
| 语文 | 1 | 张三 | 2015-01-05 | 80 |
| 语文 | 1 | 李四 | 2015-01-05 | 90 |
| 数学 | 1 | 张三 | 2015-01-04 | 80 |
提醒:如果要取 2015-01-05 的数据,要求得到张三的语文 1 年级成绩为 80 分,李四的语文 1 年级成绩为 90 分,张三的数学成绩为 80 分。要考虑到在同一天、同一学科、同一年级不是所有学生都有成绩。执行 SQL 查询需要得到的结果如下:
| 科目 | 年级 | 学生 | 成绩日期 | 成绩分数 |
| ---- | ---- | ---- | ---------- | ---- |
| 语文 | 1 | 李四 | 2015-01-05 | 90 |
| 数学 | 1 | 张三 | 2015-01-05 | 80 |
我的思路是:case when + group by
求解~
| 科目 | 年级 | 学生 | 成绩日期 | 成绩分数 |
| ---- | ---- | ---- | ---------- | ---- |
| 语文 | 1 | 张三 | 2015-01-03 | 100 |
| 语文 | 1 | 李四 | 2015-01-03 | 80 |
| 语文 | 1 | 张三 | 2015-01-05 | 80 |
| 语文 | 1 | 李四 | 2015-01-05 | 90 |
| 数学 | 1 | 张三 | 2015-01-04 | 80 |
提醒:如果要取 2015-01-05 的数据,要求得到张三的语文 1 年级成绩为 80 分,李四的语文 1 年级成绩为 90 分,张三的数学成绩为 80 分。要考虑到在同一天、同一学科、同一年级不是所有学生都有成绩。执行 SQL 查询需要得到的结果如下:
| 科目 | 年级 | 学生 | 成绩日期 | 成绩分数 |
| ---- | ---- | ---- | ---------- | ---- |
| 语文 | 1 | 李四 | 2015-01-05 | 90 |
| 数学 | 1 | 张三 | 2015-01-05 | 80 |
我的思路是:case when + group by
求解~