1.需求:一张表中有多组数据,要求取出每组的最新一条的某些字段值。
例如,成绩表中存储了学校所有学生(一年级、二年级、三年级)所有学科(语文、数学、英语)的成绩,要求取出某个学生的最近一次所有学科的成绩。
2.实现:
SELECT
学科,
(
SELECT
成绩
FROM
成绩表
WHERE
学科 = a.学科
AND 年级 = a.年级
AND 班级 = a.班级
AND 学生名字 = a.学生名字
ORDER BY
Date DESC,
Time DESC
LIMIT 1
) AS 成绩
FROM
成绩表 a
WHERE
年级 = '一年级'
AND 班级 = '一班'
AND 学生名字 = a.学生名字
GROUP BY
学科;
3.分析,可能不对,欢迎指正:
1)依据年级、班级、名字查询出该学生的所有成绩
2)依据学科进行分组
3)将分组后的学科值传入子查询中
4)子查询依据学科、年级、班级、学生名字进行查询,并按照日期、时间排序后取第一条数据
5)将子查询结果取别名为成绩
6)完成查询