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

Mysql 查询分组数据中每组某一数值最大的数据

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

北京

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

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

看不清楚,换张图片

免费获取短信验证码

Mysql 查询分组数据中每组某一数值最大的数据

方法一、将时间进行排序后再分组

该表表名为customer,  park_id表示园区id,joined_at表示用户的加入时间,created_at表示用户的创建时间。

需求:查出每个园区中,最早加入园区的第一位用户

select * from (select * from customer order by joined_at,created_at asc limit 1000) as tem group by park_id;

查出id为 1和9的两条数据

解题思路:

      【提示】  此处使用 limit 是为了确保,group by分组的时候会按照子查询中输出的排列顺序进行分组。 

        group by 之后拿取的数据,是每个分组中的第一条数据

        所以我们只需要保证将joined_at时间最早的数据排在最前面,当以park_id进行分组操作时,拿到的第一条数据必然是joined_at时间最早的一条。

        (数据重复时的处理)观察表我们可以看到id为1和12的数据都是2020-04-17加入的,但是两者之间他们的创建时间又有先后顺序的区分,id为12的要早一天,所以我们需要的是id为12的。 此刻我们就在排序的时候将created_at的排序加在joined_at后面。

这样就实现了在主要字段joined_at有重复数据的时候,我们按照第二个排序规则created_at字段进行追加排序,并拿取joined_at和created_at时间为最新的

                

方法二、拿取到每组最小时间并进行关联查询

需求:查询出每个园区最早加入的客户信息

select * from customer as c right join (select park_id,min(joined_at) as min_joined_at from customer group by park_id) as temon c.park_id=tem.park_id and c.joined_at=tem.min_joined_at;

查询结果:

根据查询可以看出,314园区的两条加入时间最早的数据都被查询了出来。

解题思路:

       1. 子查询是按照park_id进行分组,并使用sql函数min 拿取到每组中加入时间最小的时间min_joined_at。并行程临时表tem

        2. 根据拿取到的每个园区最小的加入时间关联查询,将其和customer表进行关联,按照park_id相等,且用户的加入时间于最小的加入时间min_joined_at相等来拿取对应的数据。

  


总结:由以上两个操作观察可知,

第一个方法更适合拿取按照条件进行分组后数据有重复,但我们仅取一条的需求。或者是有多个排序规则,我们按照多个排序规则进行处理后,拿取其中最匹配的一条。需要注意的一点是oracle并不支持该种方法

方法二更适合按条件分组后没有重复数据,或者有重复数据,且我们是要拿取所有符合条件的重复数据。

来源地址:https://blog.csdn.net/linyunping/article/details/130357524

免责声明:

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

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

Mysql 查询分组数据中每组某一数值最大的数据

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

下载Word文档

猜你喜欢

MySQL查询:Group By 后取出每一组中最大的数据

环境:MySQL5.7版本先生成一组测试数据public static int randAge(){ return new Random().nextInt(100);}public static char randScore(){ int i =

	MySQL查询:Group By 后取出每一组中最大的数据
2015-03-20

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

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

mysql 批量查询取每一组最新一条数据

本文介绍了在MySQL中批量查询获取每一组数据的最新一条记录的方法。通过创建临时表或直接查询原表,可以使用ROW_NUMBER()和MAX()函数来实现此目的。方法适用于分组查询,根据组别获取最新的记录。文中提供了详细的步骤和示例,有助于理解和应用该技术。
mysql 批量查询取每一组最新一条数据
2024-04-02

Mysql分组查询每组最新一条数据的三种实现方法

目录前言注意事项准备SQL错误原因方法一方法二(适用于自增ID和创建时间排序一致)方法三(适用于自增ID和创建时间排序一致)总结MAX()函数和MIN()这一类函数和GROUP BY配合使用存在问题前言在写报表功能时遇到一个需要根据用户i
2023-01-12

sql分组后怎么查询最大的数据

在SQL中,可以使用聚合函数和GROUP BY子句来进行分组,并使用ORDER BY和LIMIT子句来查询最大的数据。假设有一个名为"table_name"的表,其中有两个字段:字段A和字段B。要按字段A进行分组,并查询每组中字段B的最大
2023-10-25

mysql数据库存数组类型数据,如何判断数组中是否包含某个值?使用mybatisplus查询。

跟mybatisplus中.in()方法相反的函数 mybatisplus的in函数:查询的是数据库的某个属性的值是否在给定的集合中。这里我们讲的是一个值是否在数据库的某个属性数组中。 说明:这是一张学生信息表,其中包含了学生曾经就读过的学
2023-08-19

mysql查询某一天的数据

查询 mysql 某一天的数据有三种方法:1. 使用 date() 函数,仅返回日期部分;2. 使用 between 运算符,指定日期范围;3. 使用 curdate() 函数,返回今天的日期并查询特定日期的偏移量。如何查询 MySQL 某
mysql查询某一天的数据
2024-08-01

Mysql查询某字段值重复的数据个数

select gongchengid,count(*) as count from erp_wangongbg group by gongchengid having count>1;
Mysql查询某字段值重复的数据个数
2019-11-21

php在数组中查询某个值的方法

这篇文章主要介绍了php在数组中查询某个值的方法,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。在php中,可以使用array_search()函数查询数组中的某个值,语法“a
2023-06-14

MySQL分组排序取每组第一条数据的实现

目录group bygroup by+子查询order byderived_merge子查询order by失效的场景需求:mysql根据某一个字段分组,然后组内排序,最后每组取排序后的第一条数据。准备表:CREATE TABLE `t
MySQL分组排序取每组第一条数据的实现
2024-08-09

mysql怎么查询json数组的一个值

MySQL提供了多种方法来查询JSON数组中的值,具体方法取决于您想要获取的值的类型和位置。本文介绍了使用JSON_EXTRACT()、JSON_UNQUOTE()/JSON_VALUE()和->运算符等函数的详细方法。此外,还介绍了JSON_ARRAY_LENGTH()、JSON_SEARCH()和JSON_ARRAY()等其他辅助函数。
mysql怎么查询json数组的一个值
2024-04-14

编程热搜

目录