在做统计类测试时,经常幻想可以通过SQL去查询,在通过查询结果去验证程序。今天遇到一个问题:
需要查询所有班级的最后一条签到记录,当时思路如下:
1、所有班级的一条签到记录
group by classid
2、取最后一条签到记录
select max(createtime)
然后就写出来这种SQL:
selet a,b,max(createtime) from table_1 group by calssid;
结果就不用说了。。。。
以下为正确思路:
group by 的原理是分组,分组的时候数据怎么取? 当然取的是该组的第一条。
那第一条是什么呢?
---- 该组的第一行数据
那我们是不是先排序,在分组就OK了?
答案是肯定的!
当时写的SQL:
SELECT
t.`classesid`,
t.`classesname`,
t.`subject`,
t.`teachername`,
t.`students`,
t.`createtime`
FROM
(SELECT
*
FROM
ec_timetable
WHERE classesid IN
(SELECT
id
FROM
ec_class_classes
WHERE school_id = **
AND classes_files = '***'
AND expend_num = (classes_num * each_number))
AND product_soure = 2
AND is_sign = 1
AND is_delete = 0
ORDER BY createtime DESC) t
GROUP BY t.classesid ;