##创建表

CREATE TABLE `test_user` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`order_no` BIGINT(20) DEFAULT NULL,
`amt` INT(11) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=INNODB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4

##插入测试数据

INSERT INTO `test_user`(`id`,`order_no`,`amt`)
VALUES
(1,111,100),
(2,222,200),
(3,333,300),
(4,111,101),
(5,111,102),
(6,222,201),
(7,222,202),
(8,333,301),
(9,333,302);

##DEMO1:找出最大的金额

SELECT id,order_no,MAX(amt) FROM `test_user`
GROUP BY order_no
/**
期望结果:
"id" "order_no" "max(amt)"
"1" "111" "102"
"2" "222" "202"
"3" "333" "302"
**/

##DEMO2:根据每个订单号找出ID最大的一行记录

/**
期望结果:
"id" "order_no" "amt"
"5" "111" "102"
"7" "222" "202"
"9" "333" "302"
**/

##ID最小的这一行,不符合要求,以下5个方法。

SELECT * FROM `test_user` GROUP BY order_no

##简单方法:倒序然后再分组,可以查询出来。

SELECT t.* FROM (
SELECT * FROM `test_user` ORDER BY id DESC
) t GROUP BY order_no

##找出最大的这一条记录数
##方法1 根据ID来关联

SELECT * FROM `test_user` t
WHERE id = (SELECT MAX(id) FROM test_user WHERE order_no = t.order_no);

##方法2 根据中间表的订单号和max ID来关联

SELECT t.* FROM `test_user` t,
(SELECT order_no,MAX(id) maxId FROM `test_user` GROUP BY order_no) t2
WHERE t.order_no = t2.order_no AND t.id=t2.maxId;

##方法3 NOT EXISTS

SELECT * FROM `test_user` t
WHERE NOT EXISTS (SELECT 1 FROM test_user WHERE order_no = t.order_no AND id > t.`id`);

##方法4 根据LEFT JOIN的订单号和max ID来关联 (方法2的另外一种表现形式)

SELECT t.* FROM `test_user` t
INNER JOIN (SELECT order_no,MAX(id) maxId FROM `test_user` GROUP BY order_no) t2
ON t.order_no = t2.order_no AND t.id=t2.maxId;

##方法5 (方法3的另外一种表现形式) 查询count为0的情况

SELECT * FROM `test_user` t
WHERE 1 > (SELECT COUNT(1) FROM test_user WHERE order_no = t.order_no AND id > t.`id`);

mysql分组求最大ID记录行方法的更多相关文章

  1. MySQL查询及删除重复记录的方法

    查询及删除重复记录的方法(一)1.查找表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断select * from peoplewhere peopleId in (select p ...

  2. MySQL 分组后,统计记录条数

    分组后,统计记录条数: SELECT num,count(*) AS counts from test_a GROUP BY num; 查询结果如下: 对num去重后的数量的统计: SELECT co ...

  3. MySQL分页时统计总记录行数并使用limit返回固定数目的记录

    需求很简单:假设有一个user表,表中实际上有10000条数据,但是我不知道有多少条,我要从数据库中每次取20条数据显示,那么怎么完成呢? 方案一: 首先执行一个 select count(*) as ...

  4. mysql分组取前N记录

    http://blog.csdn.net/acmain_chm/article/details/4126306 http://bbs.csdn.net/topics/390958705 1 我只用到了 ...

  5. MySQL 分组之后如何统计记录条数 gourp by 之后的 count()

    SELECT count(*) FROM 表名 WHERE 条件 // 这样查出来的是总记录条 SELECT count(*) FROM 表名 WHERE 条件 GROUP BY id //这样统计的 ...

  6. mysql分组查询n条记录

    当业务逻辑越来越复杂时,这个查询的需求会越来越多,今天写成笔记记录下来,防止再忘记 SELECT * FROM `notice` a where add_time > 1513008000 an ...

  7. mysql count group by统计条数方法

    mysql count group by统计条数方法 mysql 分组之后如何统计记录条数? gourp by 之后的 count,把group by查询结果当成一个表再count一次select c ...

  8. php实现只保留mysql中最新1000条记录

    这篇文章主要介绍了php实现只保留mysql中最新1000条记录的方法和相关示例及数据库结构,十分的全面,有需要的小伙伴可以参考下. ? 1 2 3 4 5 6 7 8 9 10 11 12 13 1 ...

  9. mysql 分组查询

    mysql 分组查询 获取id最大的一条 (1)分组查询获取最大id SELECT MAX(id) as maxId FROM `d_table` GROUP BY `parent_id` ; (2) ...

  10. mysql获取group by的总记录行数方法

    mysql获取group by内部可以获取到某字段的记录分组统计总数,而无法统计出分组的记录数. mysql的SQL_CALC_FOUND_ROWS 使用 获取查询的行数 在很多分页的程序中都这样写: ...

随机推荐

  1. Oracle数据到MaxCompute乱码问题详解

    ​简介:集成Oracle数据到MaxCompute,乱码问题分析: 为什么,在oracle数据不乱码,集成到MaxCompute就乱码了? 问题在哪里? 1.1 乱码现象 DataWorks的数据离线 ...

  2. 一图速览 | DTCC 2021大会,阿里云数据库技术大咖都聊了些什么?

    ​简介: 3天9场干货分享,快来收藏吧! 10月18日~10月20日, 由国内知名IT技术社区主办的数据库技术交流盛会--DTCC 2021 (第十一届中国数据库技术大会)在京圆满落幕.大会以&quo ...

  3. [GF] 与 Laravel 设计相近的 Golang 框架 GoFrame

    在 GoFrame (gogf/gf) 框架中有明确的代码分层设计,分别是 api, service, dao, model. model (结构模型)一般由工具自动生成,用于定义数据结构,只可被 m ...

  4. Golang从入门到微服务

    学习视频: https://www.bilibili.com/video/BV1Sg411T7TV?p=69 学习资料下载: 链接: https://pan.baidu.com/s/1Yk4GemFR ...

  5. rails 给数据库表里加入索引

    创建迁移文件 rails g migration add_product_images_index 编写迁移文件 db/migrate/20170119093958_add_product_image ...

  6. CINN 中子图编译缓存机制

    采用 「问-答」形式记录研读 CINN 开源框架的笔记 Q:CINN中子图编译的入口是在哪里? for (const auto& node_vec : clusters) { // <- ...

  7. ubuntu编译与安装 OpenSSL-1.0.0

    apt-get purge openssl rm -rf /etc/ssl #删除配置文件 编译与安装 OpenSSL prefix 是安装目录,openssldir 是配置文件目录,另外建议安装两次 ...

  8. 十三、.net core(.NET 6)搭建ElasticSearch(ES)系列之dotnet操作ElasticSearch进行存取的方法

    .net core操作ES进行读写数据操作 在Package包项目下,新增NEST包.注意,包版本需要和使用的ES的版本保持一致,可以避免因为不兼容所导致的一些问题.例如我本机使用的ES版本是7.13 ...

  9. 【题解】A19337.火星背包

    \(\bf{用 CDQ 分治可以极大地提升程序运行的速度.}\) \(\bf{实测在本数据量下,可以在 \color{red}10ms\color{normal}} 内通过所有的测试点!\) 关于折半 ...

  10. 表单设计——《HTML5 CSS3从入门到精通》

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...