但查出来的结果出乎我的意料,你是不是也没想到,两列的时间字段竟然不一样!!!
由此想 MAX(l.learn_time)最大时间 应该是和 后面的learn.*记录没有直接关系的。
一开始是这样想的,通过时间逆排序,
select learn.*
from learn
where learn.user_id = '14201109'
ORDER BY learn.learn_time DESC
然后在通过课程id分组应该就可以获取到了,但是排序order by必须放在分组group by 之后,像下面这样
select learn.*
from learn
where learn.user_id = '14201109'
GROUP BY course_id
ORDER BY learn.learn_time DESC
结果发现learn_id 是1和6,通过group by分组之后它就只能取到的是这两条,这两条记录恰恰是时间最小的,而我们想要的是learn_id 为5和9的最大时间,经过这一番折磨,实在不知道怎么解决了,发了个求救信息,不一会儿,在同学的帮助下,就解决了只个问题,其实刚开始的思路是对的,就是先查到最大时间,再外边嵌套查询就好了,如下:
正确答案:
SELECT *
from learn
where learn.learn_time in (
SELECT MAX(l.learn_time)
FROM learn l
where l.user_id = '14201109'
GROUP BY l.course_id
其实刚开始我也这样想过,但是我是把in写的等号“=”,结果一直报错说内嵌套只能查出来一条记录才可以,当时脑子短路,咋就没想到用in【/捂脸】【/捂脸】【/捂脸】,希望你们不要像我一样犯同样的错误。
突然想起来忘了说,我用的是mysql数据库
最后,大家如果发现我写的有错误的话,欢迎评论指出哦,共同进步。觉得我写的不错的,可以关注下哦^v^
看了很多分组之后获取最大值的sql博客,真的是满心欢喜,一试就凉,还得自食其力。
简单的三个字段,id,rid,online_date,目前就是想根据rid进行分组,取online_date中的最大值,
二、错误思路
最开始想的方法就是根据rid进行group by,然后用id进行倒序,来获取最大值,后来发现group by之后又随机排序了,无法获得目标值。
SELECT id,rid...
COUNT(*):统计表中所有行,包括NULL值。COUNT(1):与COUNT(*)类似,统计所有行。COUNT(列名):统计某列中非NULL值的数量。COUNT(DISTINCT 列名):统计某列中不重复的非NULL值。COUNT可与GROUP BY和HAVING等子句结合,进行复杂的分组统计和条件过滤。COUNT(*)和COUNT(1)在大多数数据库中性能相同,可以按习惯使用。
我们写SQL时,经常会遇到这个逻辑,按某个字段分组然后从每组按某个字段取出最大的一条纪录,我们在oracle、mysql分别探讨一下实现的方法,现在我们开始吧。新建一张表 exam_results想得到的数据是 按照 type 分组 然后取出每组中 results 最大的那几条纪录。结果应该是这三条纪录:方法一: 直接使用聚合函数查出来的结果如下: 这种比较简单,但是有个问题,查询结果不能展示出来class字段(其实也不能不可以,就是比较麻烦,需要修改数据库配置文件或
网上的一些找group by后某个字段的最大值的方法:
select * from (select * from table order by time desc) as num group by name
完全是无法得到结果的,因为还是group by会将name里的行按照name的主键id进行从小到达的排序,所以不会得到每个name的最大time行
所以我得到了一个新的方法,就是将...
假设我们有一个表 table_name,其中包含两个字段 group_field 和 other_field。在MySQL数据库中,我们经常需要对数据进行分组并获取每个分组内的最大值,并且只需要获取每个分组内最大值对应的一条记录。在步骤一的基础上,我们需要获取每个分组内的最大值。在步骤二的基础上,我们需要将原始表和分组查询结果进行连接,以获取每个分组内最大值对应的一条记录。在步骤三的基础上,我们需要获取每个分组内最大值对应的一条记录。接下来,我们将详细介绍每个步骤应该做什么,并提供相应的代码。
select
A.id,A.goodsname as title,A.norms,A.status as gstatus,A.imgurls,A.uppertime,A.downtime,A.createtime as gcreatetime,A.updatetime as gupdatetime, A.isteam,B.id as defaultsku,B.pr...