IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> MySQL使用group by分组查询每组最新的一笔数据 -> 正文阅读

[大数据]MySQL使用group by分组查询每组最新的一笔数据

问题来源

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

这种场景,当然是想到了分组查询,使用 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
	(
	select
		department,
		max(create_time) as date_time
	from
		company_info
	where
		company_name = 'xxxxx科技有限公司'
	group by
		department
) a
left join company_info t 
on
	t.department = a.department
	and t.create_time = a.date_time;

使用 max 函数获取最新的 create_time 和 department,并分组,然后作为一张表 a 和原来的表 t 进行联查

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2022-09-30 00:59:31  更:2022-09-30 01:03:00 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 5:49:26-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码