存在一个需求:
需要获取某些条件下,在分组后,取最新的记录。
比如有张学生分数表,里面包含了学生一年的所有考试的语数外成绩,我想要获取同学A的最后一次考试成绩。
select * from (
select * from student_score where student_name ='A' order by id desc
) as A group by student_score;
思路问题不大
先筛选出同学A的成绩,按照id排序【默认id自增,最新一次考试的id是最大的】,然后将该查询结果作为子表,对分数进行分组。可是执行后发现,展示的结果好像并没有order by,也就是说子查询的order by失效了,解决办法
官方手册给出:
It must not have ORDER BY with LIMIT.
他们说order by 如果没有加limit 就会失效
加上limit:
select * from (
select * from student_score where student_name ='A' order by id desc limit 3
) as A group by student_score;
这里的limit 3 ,3代表的是语数外三门,可以大于3,不能够小于3