问题来源

今天遇到一个查询数据库数据的问题:要获取每个分组最新的一笔数据,并将每个分组最新的一笔数据重新组成一个新的列表

这种场景,当然是想到了分组查询,使用 group by,思路也很清晰:

  1. 将所有记录根据时间 order by desc ,倒叙排列一遍
  2. 将第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分组查询每组最新的一笔数据相关推荐

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

    MySQL分组查询每组最新的一条数据 前言 注意事项 准备SQL 错误查询 错误原因 方法一 方法二(适用于自增ID和创建时间排序一致) 方法三(适用于自增ID和创建时间排序一致) 总结 MAX()函 ...

  2. sql分组查询每组最新的一条数据

    原文地址:https://www.cnblogs.com/java-spring/p/11498457.html 开发中经常会遇到,分组查询最新数据的问题,比如下面这张表(查询每个地址最新的一条记录) ...

  3. java中mysql分组查询_ES对应mysql的group by分组查询javaApi,多对多关系的分组查询...

    ES对应mysql的group by分组查询javaApi,多对多关系的分组查询 比如我这边有个下列订单索引数据,现在的需求是按用户(fmerchantId)和支付方式(fchannelId)进行分组 ...

  4. sql分组查询每组最新一条数据

    在开发过程中,写sql语句时往往会遇到分类查询最新的一条数据或某一列最大数据,此时就需要用到连表查询和分组查询, 先分组查询出每组最大的id,再进行连表查询 SELECT id,title,u_id, ...

  5. mysql单列去重复group by分组取每组前几条记录加order by排序

    <div class="post"><h1 class="postTitle"><a id="cb_post_title ...

  6. mysql group by 聚合_浅析MySQL使用 GROUP BY 分组聚合与细分聚合

    1. 聚合函数(Aggregate Function) MySQL(5.7 ) 官方文档中给出的聚合函数列表(图片)如下: 除非另有说明,否则聚合函数都会忽略空值(NULL values). 2. 聚 ...

  7. GROUP BY 分组后显示组内所有数据

    GROUP BY 分组后显示组内所有数据 数据表中需要根据某一个字段进行分组,但需要显示分组后组内的所有数据.两种方式: 1.数据表自己和自己进行连接查询,连接条件就是需要分组的字段,但这种方式查询出 ...

  8. group by分组查询后排序

    group by分组查询后排序 如:分组查询 SELECT s.name name,COUNT(s.id) value FROM t_setmeal s,t_order o WHERE s.id=o. ...

  9. mysql group by 分组查询

    分组的SQL语句有2个: group by 和分组聚合函数实现 partition by (oracle和postgreSQL中的语句)功能 group by + having 组合赛选数据 注意:h ...

最新文章

  1. 别再说你不会 ElasticSearch 调优了,都给你整理好了
  2. Android开发之Mediaplayer
  3. php9宫格抽奖程序_php抽奖算法(适用于九宫格、大转盘)
  4. 企业托管云模式 浪潮ERP签约山东医药
  5. C# 网络编程之豆瓣OAuth2.0认证详解和遇到的各种问题及解决
  6. 探索Julia(part1)--Julia初识
  7. Python 装饰器学习以及实际使用场景实践
  8. Linux如何避免每次开启 CentOS 时,都要手动开启 sshd 服务,防止连接不上Xshell
  9. MySQL的INSERT INTO··· ON DUPLICATE KEY UPDATE使用的几种情况
  10. win10 mysql5.7.21_win10下mysql5.7.21解压版安装教程
  11. vc++6.0中创建工程时选Win32 Application和Win32 console Application的区别
  12. 【报告分享】2009-2019年“双11”购物节关键数据盘点与发展趋势分析报告.pdf(附下载链接)
  13. Spring注解详解(转)
  14. ubuntu系统下vscode字体显示异常(别扭)
  15. 计算机主板大小性能区别,电脑主板是大板好还是小板好 主板中大板和小板的区别介绍...
  16. Linux Windows 的Tensorflow 配置: Nvidia 老显卡运算能力低于3.0
  17. python docx 字体设置_python docx 中文字体设置
  18. 现在公司都不缺人了?软件测试工作经历3年,面试居然被坑了....
  19. 如何用photoshop输出html网页(转)
  20. 任务调度框架Quartz用法指南

热门文章

  1. 钱诚11.16黄金原油早盘直通车,黄金原油顺势操作建议
  2. 常见数据库id号编码
  3. win10 1073linux密码,Linux Bash on Win10 忘记密码解决
  4. 【拆电脑清灰】戴尔游匣G3
  5. Response响应详解
  6. Mac软件卸载:安全彻底地卸载Microsoft Outlook
  7. 可视化搭建移动端店铺解决方案
  8. android视频动态壁纸app,手机壁纸视频动态壁纸
  9. 【厚积薄发】Crunch压缩图片的AssetBundle打包
  10. ADAM : A METHOD FOR STOCHASTIC OPTIMIZATION