mysql如何取分组之后最新的数据

 更新时间:2022年06月08日 14:41:59   作者:Tracy苏何  
开发中经常会遇到,分组查询最新数据的问题,下面这篇文章主要给大家介绍了关于mysql如何取分组之后最新的数据的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下

一、数据表设计

二、查询场景 

统计每门课的考试次数、最新一次考试的时间、最新一次考试的录入成绩的老师

1、统计没门课的考试次数

#考试次数统计
select project '科目',count(project) '考试次数' from score a group by project

查询结果:

 2、最新一次考试的时间

#考试次数统计	最新一次考试的时间
select project '科目',count(project) '考试次数' ,max(create_time) from score a group by project

查询结果:

 

 3、分组统计最新的录入成绩的老师

当我们分组去查询最新的录入成绩的老师或者分组查询最新一次各科的成绩时确发现数据不是最新的。

SELECT
	a.id,
	a.edit_teacher,
	a.project,
	a.create_time,
	a.score, 
	count(project) '考试次数',
	max(create_time) '最新数据时间'
FROM
	score a 
GROUP BY
	a.project

查询结果:

但是很显然我们需要查询的数据id应该是4、8、12

 可以看出分组聚合的时候默认查询的是分组之后的第一条数据,那么我们想要查询最新的数据需要新对我们的数据进行排序

SELECT
	*,
	count( project ) '考试次数',
	max(create_time) '最新数据时间' 
FROM
	(
SELECT
	a.id,
	a.edit_teacher,
	a.project,
	a.create_time,
	a.score 
FROM
	score a 
ORDER BY
	a.id DESC 
	) b 
GROUP BY
	b.project

查询结果:

我们发现数据并不是我们想要的结果,子查询里面的排序失效了

网上查找各种资料发现

子查询生成的临时表(派生表derived table)中使用order by且使其生效,必须满足三个条件:

1、外部查询禁止分组或者聚合

2、外部查询未指定having,HAVING, order by

3、外部查询将派生表或者视图作为from句中唯一指定源

显然我们没有满足,那么如何解决order by失效呢?

我们外部表使用了group by,那么临时表将不会执行filesort操作(即order by会被忽略),所以我们可以在临时表中加上(distinct(a.id))。

SELECT
	*,
	count( project ) '考试次数' ,
	max(create_time) '最新数据时间' 
FROM
	(
SELECT DISTINCT
	a.id,
	a.edit_teacher,
	a.project,
	a.create_time,
	a.score 
FROM
	score a 
ORDER BY
	a.id DESC 
	) b 
GROUP BY
	b.project

执行结果:

 结果正确。

总结

到此这篇关于mysql如何取分组之后最新的数据的文章就介绍到这了,更多相关mysql取分组最新数据内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 解决mysql的int型主键自增问题

    解决mysql的int型主键自增问题

    这篇文章主要介绍了解决mysql的int型主键自增问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-07-07
  • 关于MySQL自增ID的一些小问题总结

    关于MySQL自增ID的一些小问题总结

    这篇文章主要给大家总结介绍了关于MySQL自增ID的一些小问题,文中通过示例代码介绍的非常详细,对大家学习或者使用MySQL具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-11-11
  • 详解Mysql查询条件中字符串尾部有空格也能匹配上的问题

    详解Mysql查询条件中字符串尾部有空格也能匹配上的问题

    在本篇文章里小编给大家整理的是关于详解Mysql查询条件中字符串尾部有空格也能匹配上的问题,需要的朋友们可以参考下
    2020-02-02
  • 关于skip_name_resolve参数的总结分享

    关于skip_name_resolve参数的总结分享

    下面小编就为大家带来一篇关于skip_name_resolve参数的总结分享。小编觉得挺不错的,现在分享给大家。给大家一个参考。一起跟随小编过来看看吧
    2016-03-03
  • MySQL实战之Insert语句的使用心得

    MySQL实战之Insert语句的使用心得

    这篇文章主要给大家介绍了关于MySQL实战之Insert语句的使用心得的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-10-10
  • mysql 基本操作

    mysql 基本操作

    早打算写些关于数据库操作方面的知识了,现在终于完成了第一篇,以下记录了关于mysql操作方面的基础知识
    2012-08-08
  • MySQL Community Server 8.0.29安装配置方法图文教程

    MySQL Community Server 8.0.29安装配置方法图文教程

    这篇文章主要为大家详细介绍了MySQL Community Server 8.0.29安装配置方法图文教程,文中安装步骤介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-06-06
  • MySQL数据库大小写敏感的问题

    MySQL数据库大小写敏感的问题

    今天小编就为大家分享一篇关于MySQL数据库大小写敏感的问题,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-03-03
  • MySQLBackup备份数据库的操作过程

    MySQLBackup备份数据库的操作过程

    这篇文章主要介绍了MySQLBackup备份数据库的操作过程,包括安装部署和配置备份管理员的相关知识,本文给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧
    2024-03-03
  • Linux下启动多个mysql服务器例子

    Linux下启动多个mysql服务器例子

    这篇文章主要介绍了Linux下启动多个mysql服务器例子,本文还包括了3个可能遇到的问题及解决方法,需要的朋友可以参考下
    2014-07-07

最新评论