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更便捷准确哦。
3)
SELECT
jc.`StageOppId`,
cj.`JobTitle`
FROM
`JobCandidate` jc
LEFT JOIN `ComJob` AS cj ON jc.`JobId` = cj.`JobId`
WHERE
jc.`ComId` = '59ffcd4872e07f09f000696a'
AND jc.`AddTime` = (
SELECT MAX(`AddTime`)
FROM `JobCandidate` subjc
WHERE subjc.`UserId` = jc.`UserId`
AND subjc.`ComId` = '59ffcd4872e07f09f000696a'
)
GROUP BY
jc.`UserId`, cj.`JobTitle`, jc.`StageOppId`;
更多推荐
所有评论(0)