关于分组后查到最新数据的sql

今天在写一个sql的时候要实现查询出分组后数据的最新记录。
刚开始是这样写的

SELECT
    *
FROM
    `cmf_locus` `a`
LEFT JOIN `cmf_ship` `b` ON `a`.`ship_id` = `b`.`id`
WHERE
    `a`.`position` = '定位'
AND `a`.`alarm` LIKE '%一切正常%'
GROUP BY
    `ship_id`
ORDER BY
    'time' DESC

显然这样子是错误的,这里是把分组之后的数据再进行时间倒序。


关于分组后查到最新数据的sql_第1张图片
image.png

后面又用子查询来试了一下还是不行

SELECT
    *
FROM
    `cmf_locus` `a`
LEFT JOIN `cmf_ship` `b` ON `a`.`ship_id` = `b`.`id`
WHERE
    `a`.`position` = '定位'
AND `a`.`alarm` LIKE '%一切正常%'
AND a.time = (SELECT
    a.time
FROM
    `cmf_locus` a
ORDER BY
    time DESC
LIMIT 1)
GROUP BY
    `ship_id`

可以看到也查不到数据,只有一条记录,显然这样也是错误的


image.png

最后想到用子查询中时间倒序拿到最新的值,然后在外面分组得以解决

SELECT
    *
FROM
    (
        SELECT
            *
        FROM
            `cmf_locus` 
        
        ORDER BY
            `time` DESC
    ) `temp`
GROUP BY
    `ship_id`
关于分组后查到最新数据的sql_第2张图片
image.png

可以看到,数据已经查到。

你可能感兴趣的:(关于分组后查到最新数据的sql)