MySQL使用group by分组查询每组最新的一笔数据
问题来源
今天遇到一个查询数据库数据的问题:要获取每个分组最新的一笔数据,并将每个分组最新的一笔数据重新组成一个新的列表
这种场景,当然是想到了分组查询,使用 group by,思路也很清晰:
- 将所有记录根据时间 order by desc ,倒叙排列一遍
- 将第1步中的数据,group by 一下,就能得到想要的列表
按这个思路,得到的 sql 语句如下:
select *
from (
select *
from company_info
where company_name = 'xxxxx科技有限公司'
order by create_time desc
) t
group by t.department;
思路没有问题,语句也没有问题,但执行后,却怎么也得不到想要的结果
这里有一个大坑,那就是从 mysql 5.7 开始,对于子查询的排序,其实是不生效的,意思就是下面这个子查询语句的排序,对于整体而言无效,所以最终得不到想要的结果
select *
from company_info
where company_name = 'xxxxx科技有限公司'
order by create_time desc
解决方式
方式一
还是上面的思路,只要加上一个 limit 就可以拿到想要的结果了,语句如下:
select *
from (
select *
from company_info
where company_name = 'xxxxx科技有限公司'
order by create_time desc
limit 1000
) t
group by t.department;
这个就算是在 mysql 5.7 及更高的版本也能跑,亲测可用。至于 limit 后面的数字是 1000 还是 10000,可以根据具体的业务场景设置
方式二
联表查询,实现的语句如下:
select*
from(selectdepartment,max(create_time) as date_timefromcompany_infowherecompany_name = 'xxxxx科技有限公司'group bydepartment
) a
left join company_info t
ont.department = a.departmentand t.create_time = a.date_time;
使用 max 函数获取最新的 create_time 和 department,并分组,然后作为一张表 a 和原来的表 t 进行联查
MySQL使用group by分组查询每组最新的一笔数据相关推荐
- Mysql分组查询每组最新的一条数据(三种实现方法)
MySQL分组查询每组最新的一条数据 前言 注意事项 准备SQL 错误查询 错误原因 方法一 方法二(适用于自增ID和创建时间排序一致) 方法三(适用于自增ID和创建时间排序一致) 总结 MAX()函 ...
- sql分组查询每组最新的一条数据
原文地址:https://www.cnblogs.com/java-spring/p/11498457.html 开发中经常会遇到,分组查询最新数据的问题,比如下面这张表(查询每个地址最新的一条记录) ...
- java中mysql分组查询_ES对应mysql的group by分组查询javaApi,多对多关系的分组查询...
ES对应mysql的group by分组查询javaApi,多对多关系的分组查询 比如我这边有个下列订单索引数据,现在的需求是按用户(fmerchantId)和支付方式(fchannelId)进行分组 ...
- sql分组查询每组最新一条数据
在开发过程中,写sql语句时往往会遇到分类查询最新的一条数据或某一列最大数据,此时就需要用到连表查询和分组查询, 先分组查询出每组最大的id,再进行连表查询 SELECT id,title,u_id, ...
- mysql单列去重复group by分组取每组前几条记录加order by排序
<div class="post"><h1 class="postTitle"><a id="cb_post_title ...
- mysql group by 聚合_浅析MySQL使用 GROUP BY 分组聚合与细分聚合
1. 聚合函数(Aggregate Function) MySQL(5.7 ) 官方文档中给出的聚合函数列表(图片)如下: 除非另有说明,否则聚合函数都会忽略空值(NULL values). 2. 聚 ...
- GROUP BY 分组后显示组内所有数据
GROUP BY 分组后显示组内所有数据 数据表中需要根据某一个字段进行分组,但需要显示分组后组内的所有数据.两种方式: 1.数据表自己和自己进行连接查询,连接条件就是需要分组的字段,但这种方式查询出 ...
- group by分组查询后排序
group by分组查询后排序 如:分组查询 SELECT s.name name,COUNT(s.id) value FROM t_setmeal s,t_order o WHERE s.id=o. ...
- mysql group by 分组查询
分组的SQL语句有2个: group by 和分组聚合函数实现 partition by (oracle和postgreSQL中的语句)功能 group by + having 组合赛选数据 注意:h ...
最新文章
- 别再说你不会 ElasticSearch 调优了,都给你整理好了
- Android开发之Mediaplayer
- php9宫格抽奖程序_php抽奖算法(适用于九宫格、大转盘)
- 企业托管云模式 浪潮ERP签约山东医药
- C# 网络编程之豆瓣OAuth2.0认证详解和遇到的各种问题及解决
- 探索Julia(part1)--Julia初识
- Python 装饰器学习以及实际使用场景实践
- Linux如何避免每次开启 CentOS 时,都要手动开启 sshd 服务,防止连接不上Xshell
- MySQL的INSERT INTO··· ON DUPLICATE KEY UPDATE使用的几种情况
- win10 mysql5.7.21_win10下mysql5.7.21解压版安装教程
- vc++6.0中创建工程时选Win32 Application和Win32 console Application的区别
- 【报告分享】2009-2019年“双11”购物节关键数据盘点与发展趋势分析报告.pdf(附下载链接)
- Spring注解详解(转)
- ubuntu系统下vscode字体显示异常(别扭)
- 计算机主板大小性能区别,电脑主板是大板好还是小板好 主板中大板和小板的区别介绍...
- Linux Windows 的Tensorflow 配置: Nvidia 老显卡运算能力低于3.0
- python docx 字体设置_python docx 中文字体设置
- 现在公司都不缺人了?软件测试工作经历3年,面试居然被坑了....
- 如何用photoshop输出html网页(转)
- 任务调度框架Quartz用法指南