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

2023-05-16

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

sql如下:

复制代码


– Table structure for test


DROP TABLE IF EXISTS test;
CREATE TABLE test (
id int(11) NOT NULL AUTO_INCREMENT,
name varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
address varchar(10) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
create_time timestamp(0) NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (id) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 13 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;


– Records of test


INSERT INTO test VALUES (1, ‘张三1’, ‘北京’, ‘2019-09-10 11:22:23’);
INSERT INTO test VALUES (2, ‘张三2’, ‘北京’, ‘2019-09-10 12:22:23’);
INSERT INTO test VALUES (3, ‘张三3’, ‘北京’, ‘2019-09-05 12:22:23’);
INSERT INTO test VALUES (4, ‘张三4’, ‘北京’, ‘2019-09-06 12:22:23’);
INSERT INTO test VALUES (5, ‘李四1’, ‘上海’, ‘2019-09-06 12:22:23’);
INSERT INTO test VALUES (6, ‘李四2’, ‘上海’, ‘2019-09-07 12:22:23’);
INSERT INTO test VALUES (7, ‘李四3’, ‘上海’, ‘2019-09-11 12:22:23’);
INSERT INTO test VALUES (8, ‘李四4’, ‘上海’, ‘2019-09-12 12:22:23’);
INSERT INTO test VALUES (9, ‘王二1’, ‘广州’, ‘2019-09-03 12:22:23’);
INSERT INTO test VALUES (10, ‘王二2’, ‘广州’, ‘2019-09-04 12:22:23’);
INSERT INTO test VALUES (11, ‘王二3’, ‘广州’, ‘2019-09-05 12:22:23’);
复制代码
平常我们会进行按照时间倒叙排列然后进行分组,获取每个地址的最新记录,sql如下:

SELECT * FROM(SELECT * FROM test ORDER BY create_time DESC) a GROUP BY address
但是查询结果却不是我们想要的:

执行时间按倒叙排列结果为:

所以真正想要得到的结果是id为2/8/11的记录,上面的查询得到的却是1/5/9,这是为什么呢?

因为在mysql5.7的时候,子查询的排序已经变为无效了,可能是因为子查询大多数是作为一个结果给主查询使用,所以子查询不需要排序的原因。

那么我们应该怎么查呢,有两种方式:

第一种:

SELECT * FROM(SELECT * FROM test ORDER BY create_time DESC LIMIT 10000) a GROUP BY address
结果为:

对子查询的排序进行limit限制,此时子查询就不光是排序,所以此时排序会生效,但是限制条数却只能尽可能的设置大些

第二种:

SELECT t.* FROM (SELECT address,max(create_time) as create_time FROM test GROUP BY address) a LEFT JOIN test t ON t.address=a.address and t.create_time=a.create_time
通过MAX函数获取最新的时间和地址(因为需要按照地址分组),然后作为一张表和原来的数据进行联查,

条件就是地址和时间要和获取的最大时间和地址相等,此时结果为:

这两种方式的查询效率差不太多,第二种比第一种查询稍微快一点,可能是由于第二种方式的子查询只有两个字段(时间,被分组字段)的缘故吧!

感兴趣的可以照一张字段多的数据量大的表查询一下比较比较。

PS:第二种方式中最新的记录,不能同时地点和时间都相同,如果出现这种情况,第二种方式会查出把这两条记录都查出来,而第一条不会。

所以根据业务和数据情况来选择其中一种方式,毕竟效率差不太多。

劈天造陆,开辟属于自己的天地!!!与君共勉

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

sql分组查询每组最新的一条数据 的相关文章

  • 电脑蓝屏按哪三个键恢复?怎么修复蓝屏问题

    最近有人在咨询小编 xff0c 说电脑蓝屏按哪三个键恢复 xff1f 我一脸懵逼 xff0c 还有这操作么 xff1f 其实如果发你的电脑一开机就蓝屏 xff0c 一开机就蓝屏 xff0c 没办法进入系统的话 xff0c 那么你就需要用另外
  • msvcr120.dll丢失怎样修复?msvcr120.dll文件修复方法

    Dll文件的丢失相信很多人都遇到过吧 xff1f 其实只要丢失了dll文件 xff0c 那么你打开软件程序或者游戏的时候 xff0c 就会发现打不开 xff0c 提升你文件缺失 xff0c 特别是msvcr120 dll丢失这个经常发生 x
  • msvcp140.dll是什么?怎么修复msvcp140.dll缺失的问题

    小编最近遇到这样的一个dll丢失问题 xff0c 系统无端端弹出说我msvcp140 dll丢失了 xff0c 并且无法启动一些软件程序 xff0c 于是乎小编就针对于这问题查询了相关的解决方法 xff0c 今天就来给大家详细的说说 xff
  • opencl.dll丢失怎么办?为什么会丢失?

    电脑是我们生活当中不可缺少的一个重要工具 xff0c 很多时候我们会用电脑来解决很多问题 xff0c 但是有些朋友会发现 xff0c 电脑在使用的过程中 xff0c 经常会出现各种各样的错误 xff0c 特别是在打开一些文件的时候 xff0
  • 找不到msvcr110dll,无法继续执行代码,解决方法分享

    找不到msvcr110dll 无法继续执行代码 xff0c 电脑出现这种情况 xff0c 主要是缺失了msvcr110dll这个文件 要解决这个问题 xff0c 其实不难 xff0c 有多种方法 第一种解决msvcr110dll的方法 1在
  • Kali Linux ettercap的使用

    ettercap是执行ARP欺骗嗅探的工具 xff0c 通常用它来施行中间人攻击 我使用的是Kali Linux 2 0 xff1b 在开始使用ettercap之前 xff0c 先配置一下 xff1a 编辑配置文件 etc ettercap
  • Notion AI是什么?和chatgpt比哪个好?

    最近对于人工智能的热度可谓是前所未有的高涨 xff0c 毕竟现在的人工智能发展是越来越快 xff0c 能做的事情也是越来越多 xff0c 不再是那种低等的假智能小爱同学和siri那种 今天我们主要来聊聊Notion AI和chatgpt吧
  • 缺失msvcrtd.dll怎么办?如何修复msvcrtd.dll文件

    在日常使用电脑中 xff0c 其实出现一些dll文件缺失是非常的正常的 xff0c 这时候我们不需要慌张 xff0c 只需要知道一些解决方法 xff0c 那么就可以解决文件缺失问题 xff0c 今天来给大家详细的讲解一下缺失msvcrtd
  • 电脑丢失msvcp140.dll的解决方法分享

    如果你在使用电脑时遇到了 找不到msvcp140 dll 的错误提示 xff0c 别着急 xff01 这并不是什么严重的问题 xff0c 电脑丢失msvcp140 dll的解决方法分享 xff0c 只要你按照以下方法进行处理 xff0c 很
  • 人工智能机器人-智能时代的新纪元

    现代科学技术的飞速发展不仅让生产生活变得更加便捷 xff0c 同时也为人们带来了各种人工智能机器人 通过不断优化和升级 xff0c 现今人工智能机器人已经成为人们生活中不可或缺的一部分 本文将介绍多个人工智能机器人 xff0c 其中一项是C
  • binkw32dll缺失怎么办?如何解决binkw32dll修复问题

    binkw32dll缺失怎么办 xff1f 在使用某些计算机游戏或应用程序时 xff0c 您可能遇到过binkw32dll缺失的问题 这意味着您的计算机无法找到该DLL文件 xff0c 从而无法正常运行程序 在本文中 xff0c 我们将探讨
  • AI作画生成器,AI作画的优缺点

    AI作画生成器 xff0c AI作画生成是一种基于人工智能技术的艺术创作方式 xff0c 其在过去几年中得到了广泛应用和迅速发展 本文将以此为题 xff0c 从几个方面来探讨AI作画生成 一 什么是AI作画生成 AI作画生成 xff0c 顾
  • midjourney入口是什么?怎么使用midjourney

    最近有很多小伙伴在咨询我midjourney的事情 xff0c 因为他们看过midjourney的神奇能力 xff0c 忍不住想玩一下 xff0c 都在问midjourney要去哪里玩 xff1f midjourney入口是什么 xff1f
  • API-MS-WIN-CRT-RUNTIME-L1-1-0.DLL丢失怎么解决?

    API MS WIN CRT RUNTIME L1 1 0 DLL是Windows系统中的一个非常重要的动态链接库文件 xff0c 该文件的全称为 Application Programming Interface Microsoft Wi
  • 缺失msvcp140.dll怎么办?msvcp140.dll下载

    缺失msvcp140 dll怎么办 xff1f msvcp140 dll下载 xff0c 作为Windows操作系统中必备的组件之一 xff0c msvcp140 dll是一款Microsoft Visual C 43 43 Runtime
  • 电脑丢失的dll文件怎么一键修复?修复dll方法分享

    电脑丢失的dll文件怎么一键修复 xff1f 电脑状况常常让人遇到各种问题 xff0c 其中 DLL文件丢失 是最常见的问题之一 在这篇文章中 xff0c 我们会介绍为何会出现DLL文件丢失的问题 xff0c 以及提供一种简单 快捷的DLL
  • Kali Linux使用Aircrack破解wifi密码(wpa/wpa2)

    Kali Linux能做很多事 xff0c 但是它主要以渗透测试及 破解wifi密码 闻名 要求 xff1a 安装有Kali Linux的计算机支持监控模式的网卡 xff0c 笔记本电脑一般都支持字典文件时间和耐心 这种攻击需要字典文件 x
  • R语言 基本数据分析

    本文基于R语言进行基本数据统计分析 xff0c 包括基本作图 xff0c 线性拟合 xff0c 逻辑回归 xff0c bootstrap采样和Anova方差分析的实现及应用 不多说 xff0c 直接上代码 xff0c 代码中有注释 1 基本
  • 在国内怎么玩chatgpt,有可行的gpt游玩攻略么

    首先你想玩chatgpt xff0c 你要明白一点这是一个国外的软件 xff0c 所以你懂的 xff0c 如果你不会魔法 xff0c 那么就必须要改其他途径去探索游玩咯 今天我们就来探讨一下国内怎么玩chatgpt xff0c 可行的gpt
  • 怎么使用chatgpt,GPT的使用方式解析

    怎么使用Chatgpt xff1f 这是很多人心中的疑惑 xff0c 更多的人只是听说过chatgpt的大名 xff0c 但是具体连见都没见过gpt xff0c 那么接下来小编就来给大家详细的介绍一下吧 一 了解chatgpt ChatGP

随机推荐