MySQL group by后取每个分组中最新一条数据

Posted zpjing~.~

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySQL group by后取每个分组中最新一条数据相关的知识,希望对你有一定的参考价值。

一、需求

mysql group by后取每个分组中最新一条数据

二、实现

1)方案1:使用min()和max()方法

1、group by后取每个分组中最新一条数据

SELECT MAX(test_id) FROM test GROUP BY test_user_id;

2、group by后取每个分组中第一条插入的数据

SELECT MIN(test_id) FROM test GROUP BY test_user_id;

3、group by后,获取每个分组中大于一条数据的记录

SELECT count(*) as num FROM test GROUP BY test_user_id HAVING num>1;

4、group by后,获取每个分组中大于一条数据的记录的最新一条数据

SELECT MAX(test_id) FROM test GROUP BY test_user_id HAVING COUNT(*)>1;

5、group by后,获取每个分组中多条记录的test_id拼接串

SELECT GROUP_CONCAT(test_id) FROM test GROUP BY test_user_id;

6、group by后,获取每个分组中多条记录的test_id和test_ctime拼接串

通过group_concat()可以获取每个分组中多条记录的test_id拼接串,GROUP_CONCAT(test_id,"=",test_ctime)返回分组中每条记录对应的test_id和test_ctime,test_id和test_ctime通过“=”号拼接,方便查看每条记录对应的数据;

SELECT GROUP_CONCAT(test_id,"=",test_ctime),GROUP_CONCAT(test_id),GROUP_CONCAT(test_ctime) 
FROM test GROUP BY test_user_id;

 

***小结***

sql中存在group by,那么sql中的select 语句是对每个分组进行操作的,而不是对分组的结果集进行操作的;

比如select MAX(test_id) 返回每个分组中多条记录中最大的一条记录;

select group_concat(test_id) 返回每个分组中多条记录的test_id拼接串;

select 语句中包含聚合函数,将计算每组多条记录;汇总值

2)方案2:order by和group by配置使用

按照字段的排序order by后使用group by,方可获取每个分组中按照某字段排序后的第一条数据;

使用方案1更便捷准确哦。

SQL group by 分组后,同一组的排序后取第一条

SELECT * FROM(
                SELECT
                    [SPID]
                    ,[PH1]
                    ,[PH1_Code]
                    ,[ProjectName]
                    ,ROW_NUMBER() OVER(PARTITION BY [SPID] ORDER BY [SPID]) RowNum
                FROM(
                    SELECT
                          a.[SPID]
                          ,b.[ProjectName]
                          ,b.[PH1] AS [PH1_Code]
                          ,e.[Description] AS [PH1]
                      FROM [dbo].[CAE_SPAndTask] a
                      LEFT JOIN [dbo].[CAE_Task] b ON b.[CAENumber]= a.[CAENumber]
                      LEFT JOIN [dbo].[CAE_PH1PH2] e ON e.[ProductHierarchy] = b.[PH1]
                )t4
                GROUP BY [SPID],[ProjectName],[PH1_Code],[PH1]
            )t5
            WHERE RowNum = 1




















以上是关于MySQL group by后取每个分组中最新一条数据的主要内容,如果未能解决你的问题,请参考以下文章

SQL group by 分组后,同一组的排序后取第一条

sql:用group by分组后,每组随意取一个记录?

sql取出每个分组的前几条

Mysql 分组以后取每组的前三名数据

Sql语句groupBY分组后取最新一条记录的SQL

mysql:group by,order by