查询每个学生最近5天分数最高的记录

梅小西Echo 2014-09-04 06:41:20
一个表,学生id,日期,分数,存了每个学生每天的分数,如何查出每个学生过去5天最高分数的记录
CREATE TABLE `A` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`sid` int(11) DEFAULT NULL,
`score` float DEFAULT NULL,
`date` date DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
...全文
254 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
ACMAIN_CHM 2014-09-05
  • 打赏
  • 举报
回复
参考下贴中的多种方法,把最后的5条记录取出,外面再套一层取最大即可。 http://blog.csdn.net/acmain_chm/article/details/4126306 [征集]分组取最大N条记录方法征集,及散分....
梅小西Echo 2014-09-05
  • 打赏
  • 举报
回复
引用 1 楼 mchdba 的回复:
用group by 的max方法: SELECT a.sid,MAX(score) FROM A a WHERE DATEDIFF(a.date,NOW()) <=5 GROUP BY a.sid ;
这个表里的最新日期不一定就是今天的日期,也许是以前的日期,而且日期不是连续的,不一定每天都有,反正就类似按日期倒排前5条的意思。。不知道您明白没
梅小西Echo 2014-09-05
  • 打赏
  • 举报
回复
引用 2 楼 ACMAIN_CHM 的回复:
select *
from A t
where `date`>curdate()-interval 5 day
and not exists (select 1 from A where `date`>curdate()-interval 5 day and sid=t.sid and score>t.score)
老大,可能我没说清楚,这个表里的最新日期不一定就是今天的日期,也许是以前的日期,而且日期不是连续的,不一定每天都有,反正就类似按日期倒排前5条的意思。。不知道您明白没
ACMAIN_CHM 2014-09-04
  • 打赏
  • 举报
回复
select *
from A t
where `date`>curdate()-interval 5 day
and not exists (select 1 from A where `date`>curdate()-interval 5 day and sid=t.sid and score>t.score)
九月茅桃 2014-09-04
  • 打赏
  • 举报
回复
用group by 的max方法: SELECT a.sid,MAX(score) FROM A a WHERE DATEDIFF(a.date,NOW()) <=5 GROUP BY a.sid ;

56,677

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧