sql 查询 group by分组 后 获得每组中时间最大 记录

直接上最终sql

id为数据唯一键,storage_time为时间戳,application_matters为分组依据

SELECT
    * 
FROM
    csrc_approved_products_weekly 
WHERE
    id IN ( 
                SELECT SUBSTRING_INDEX(group_concat( id ORDER BY `storage_time` DESC ), ,, 1 ) 
                FROM csrc_approved_products_weekly
                GROUP BY application_matters
    )

解析

1.按时间从大到小顺序取出唯一键id列表

SELECT
    group_concat( id ORDER BY `storage_time` DESC ) 
FROM
    csrc_approved_products_weekly 
GROUP BY
    application_matters

2.再用SUBSTRING_INDEX函数取出第一个(也就是时间最大的数据id)

SELECT
    SUBSTRING_INDEX( group_concat( id ORDER BY `storage_time` DESC ), ,, 1 ) 
FROM
    csrc_approved_products_weekly 
GROUP BY
    application_matters

3.再根据 id查询数据

SELECT
    * 
FROM
    csrc_approved_products_weekly 
WHERE
    id IN ( 
                SELECT SUBSTRING_INDEX( group_concat( id ORDER BY `storage_time` DESC ), ,, 1 ) 
                FROM csrc_approved_products_weekly 
                GROUP BY application_matters
    )
经验分享 程序员 微信小程序 职场和发展