在做统计类测试时,经常幻想可以通过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 ;
本文介绍了一种使用SQL查询特定数据的方法,即如何从多个班级中获取每个班级最新的签到记录。通过对查询过程的详细解析,文章提供了正确的SQL实现方案。
37万+

被折叠的 条评论
为什么被折叠?



