【MySQL】【13】分组查询取每组最新的一条数据

前言:获取所有用户填写的最新一条地址数据

正文:

错误写法:

mysql5.7时,子查询的排序已经变为无效了

SELECT * FROM (SELECT * FROM address ORDER BY create_time DESC) a GROUP BY user_id

方法1:

此时子查询就不光是排序,所以此时排序会生效,但有条数限制

SELECT * FROM (SELECT * FROM address ORDER BY create_time DESC LIMIT 10000) a GROUP BY user_id

方法2:

通过MAX函数获取最新的时间和人员ID(分组条件),然后作为一张表和原来的数据进行联查

注:这种方式如果有两条数据的user_id和create_time都相等会查出来两条数据,这种情况只能distinct一下了

SELECT t.*
  FROM (SELECT user_id, max(create_time) as create_time FROM address GROUP BY user_id) a
 INNER JOIN address t
    ON t.user_id = a.user_id and t.create_time=a.create_time

参考博客:

MySQL分组查询每组最新的一条数据(通俗易懂) - 劈天造陆 - 博客园
https://www.cnblogs.com/java-spring/p/11498457.html

原文地址:https://www.cnblogs.com/huashengweilong/p/12005743.html

时间: 2024-10-28 14:57:41

【MySQL】【13】分组查询取每组最新的一条数据的相关文章

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

开发中经常会遇到,分组查询最新数据的问题,比如下面这张表(查询每个地址最新的一条记录): sql如下: -- ---------------------------- -- Table structure for test -- ---------------------------- DROP TABLE IF EXISTS `test`; CREATE TABLE `test` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(10

sqlServer 取每组的前几条数据

首先的建表语句: if exists (select * from sysobjects where id = OBJECT_ID('[test]') and OBJECTPROPERTY(id, 'IsUserTable') = 1) DROP TABLE [test] CREATE TABLE [test] ( [id] [int] IDENTITY (1, 1) NOT NULL , [name] [nvarchar] (50) NULL , [votenum] [int] NULL ,

mysql中分组之后取每个组的前三个

SELECT * FROM course a WHERE 3>(SELECT COUNT(*) FROM course WHERE coursename=a.coursename and score>a.score) ORDER BY a.coursename,a.score DESC;取每一条记录,判断同一个班级,大于当前成绩的同学是不是小于2个人. 原文地址:https://www.cnblogs.com/fenghua/p/9109160.html

MySQL取每组的前N条记录

一.对分组的记录取前N条记录:例子:取前 2条最大(小)的记录 1 1.用子查询: 2 SELECT * FROM right2 a WHERE 2> 3 (SELECT COUNT(*) FROM right2 b WHERE b.id=a.id AND b.account>a.account) 4 ORDER BY a.id,a.account DESC 5 2.用exists半连接: 6 SELECT * FROM right2 a WHERE EXISTS 7 (SELECT COUN

两张表一对多的连接,取多记录表中最新的一条数据

select sn, pname, srnum, rerepairtime, rn from ( select sn,pname, srnum, rerepairtime,row_number() over(partition by assetsid order by rerepairtime desc) rn from atzserreportb ) where rn = 1 两张表一对多的连接,取多记录表中最新的一条数据

MySQL 分组后取每组前N条数据

与oracle的 rownumber() over(partition by xxx  order by xxx )语句类似,即:对表分组后排序 创建测试emp表 DROP TABLE IF EXISTS emp; CREATE TABLE emp ( empno decimal(4,0) NOT NULL, ename varchar(10) DEFAULT NULL, job varchar(9) DEFAULT NULL, mgr decimal(4,0) DEFAULT NULL, hi

mysql之分组查询

注:mysql中不区分大小写,一般关键字用大写,自己写的用小写就可以 分组查询 1.select sum(salary) from person GROUP BY dept_id #按照部门分组后,求各个部门总的工资数.如果一个部门为空,那么单独作为一组 2.select sum(salary),dept_id from person GROUP BY dept_id #加上每个部门的id 3.select sum(salary) from person; #求出person表中所有人的工资 4

mysql的分组查询

1.设置数据库为严格模式: 2.数据准备 # 创建一张部门表 create table emp( id int not null unique auto_increment, name varchar(20) not null, sex enum('male','female') not null default 'male', #大部分是男的 age int(3) unsigned not null default 28, hire_date date not null, post varch

MySQL时间分组查询

表TESTER 字段:id -- INT    date  -- TIMESTAMP 1.如何按年.月.日分组查询? select DATE_FORMAT(date,'%Y-%m-%d') time, count(*) count from TESTER group by year(date), month(date), day(date); 其中year().month().day()分别是提取date中的年.月.日字段. 2.时间分组查询的效率? 在不建立索引时,我100W行数据进行测试,用