今天在写一个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
显然这样子是错误的,这里是把分组之后的数据再进行时间倒序。
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`
image.png
可以看到,数据已经查到。
网友评论