我的编程空间,编程开发者的网络收藏夹
学习永远不晚

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

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

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取分组最新数据内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

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

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

mysql怎么取分组之后最新的数据

本篇内容主要讲解“mysql怎么取分组之后最新的数据”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“mysql怎么取分组之后最新的数据”吧!一、数据表设计二、查询场景 统计每门课的考试次数、最新一
2023-07-02

SQL Group By分组后如何选取每组最新的一条数据

经常在分组查询之后,需要的是分组的某行数据,例如更新时间最新的一条数据,下面这篇文章主要给大家介绍了关于SQL Group By分组后如何选取每组最新的一条数据的相关资料,需要的朋友可以参考下
2022-11-13

mysql分组后如何每个取最新的一条记录

目录mysql分组后每个取最新的一条记录方法1方法2总结mysql分组后每个取最新的一条记录在MySQL中,若要从一个分组中获取每组的最新一条记录(通常基于时间戳或其他递增的列),可以使用子查询或者窗口函数(如果MySQL版本支持)。以
mysql分组后如何每个取最新的一条记录
2024-09-20

mysql分组后如何拿到每组数据

在MySQL中,您可以使用GROUP BY子句对数据进行分组,并使用聚合函数如COUNT、SUM等对每个组进行聚合操作。如果您想要取得每个组的数据,可以使用GROUP_CONCAT函数将每个组的数据合并成一个字符串。例如,假设您有一个名为
mysql分组后如何拿到每组数据
2024-04-20

MySQL分组查询获取每组最新的一条数据详解(group by)

目录业务场景:解决方案:group by id 方案验证:那怎么样才可以实现呢?使用 inner join 内连接,如下:总结业务场景:最近项目中迭代一个旧的功能,再原有的设计上进行功能拓展(因成本等原因,不考虑项目重构),其中设计到了这
MySQL分组查询获取每组最新的一条数据详解(group by)
2024-08-18

mongodb如何获取最新的数据

在MongoDB中可以使用以下方法获取最新的数据:1. 使用find()方法查询所有数据,并按照时间戳(或其他排序字段)降序排序,然后使用limit()方法获取最新的数据。示例代码如下:javascriptdb.collection.fin
2023-10-19

基于mysql实现group by取各分组最新一条数据

前言: group by函数后取到的是分组中的第一条数据,但是我们有时候需要取出各分组的最新一条,该怎么实现呢? 本文提供两种实现方式。 一、准备数据 http://note.youdao.com/noteshareid=dba748092
2022-05-27

oracle/mysql数据库多条重复数据如何取最新的

目录mysql1、分组取最新的,再用最新的字段连表,回查数据①按分组字段取最新的,通过主键id回表查数据②非主键字段oracle1、原理讲解-可直接看22、在重复数据取最新的3、若要删除不满足条件附:ORACLE 查询某个时间之前的重复数据
oracle/mysql数据库多条重复数据如何取最新的
2024-08-09

Sql group by 分组取时间最新的一条数据

1.取时间最新的记录 不分组有重复(多条CreateTime一样的都是最新记录) select *from test twherepid in( select PId from Test t where time=(se
2023-08-16

js如何获取数组中的最后一项

这篇文章主要为大家展示了“js如何获取数组中的最后一项”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“js如何获取数组中的最后一项”这篇文章吧。获取数组中的最后一项如果想获取数组中的最后一项,很多
2023-06-04

mongodb如何获取最新的数据库

在MongoDB中,可以使用以下方法获取最新的数据库:1. 使用`show dbs`命令来列出所有的数据库。这将显示所有已创建的数据库。2. 使用`db.getSiblingDB()`方法来获取最新的数据库。该方法返回一个新的数据库对象,可
2023-09-04

编程热搜

目录