mysql查时间最小的数据_MySQL中分组查询获取组内时间最小的记录集合
需求现有一需求,根据id/name/login_name/created_at字段查询结果后,需要将查询出来的记录根据id和name分组后,在组内选择时间created_at最小的那一个login_name根据id/name分组之后,login_name会有多个,组内时间也会不同;组内id/name相同。思路SQL1中查询出全部记录,并且根据id和created_at拼接为新的字段k,在SQL2中
需求
现有一需求,根据id/name/login_name/created_at字段查询结果后,需要将查询出来的记录根据id和name分组后,在组内选择时间created_at最小的那一个login_name
根据id/name分组之后,login_name会有多个,组内时间也会不同;组内id/name相同。
思路
SQL1中查询出全部记录,并且根据id和created_at拼接为新的字段k,在SQL2中过滤出符合条件的记录,并且根据id和created_at拼接为新的字段;最后在SQL3中,根据字段k去查询过滤出符合条件的记录。
1、原有SQL查询-SQL1
原有SQL查询出来全部结果,其中
select rs.id,rs.name,u.login_name,u.created_at
from t_remote_station rs
left join t_user u on rs.id=u.station_id
and u.customer_type=1 and u.product_id=1
order by rs.id,u.created_at asc
结果如下(共有31条记录,其中有几个需要过滤):

共有31条数据
2、修改SQL-SQL2
select rs.id,rs.name,MIN(u.created_at) created_at
from t_remote_station rs left join t_user u on rs.id=u.station_id
and u.customer_type=1 and u.product_id=1
group by rs.id,rs.name

分组之后获取24条数据
3、获取每组内时间最小的那条记录-SQL3(符合要求的SQL)
select a.id,a.name,a.login_name,a.created_at from (
select rs.id,rs.name,u.login_name,u.created_at,CONCAT(rs.id,u.created_at) as k
from t_remote_station rs
left join t_user u on rs.id=u.station_id
and u.customer_type=1 and u.product_id=1
order by rs.id,u.created_at asc) a
where a.k in (
select CONCAT(b.id,b.created_at) from (
select rs.id,rs.name,MIN(u.created_at) created_at
from t_remote_station rs left join t_user u on rs.id=u.station_id
and u.customer_type=1 and u.product_id=1
group by rs.id,rs.name) b );

最后获取符合要求的24条数据
4、End
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐


所有评论(0)