I表格数据如下:

id                  car_id                              create_time           remark
6c3befd0201a4691    4539196f55b54523986535539ed7beef    2017-07-1 16:42:49    firstcar
769d85b323bb4a1c    4539196f55b54523986535539ed7beef    2017-07-18 16:42:49   secondcar
984660c4189e499     575d90e340d14cf1bef4349b7bb5de9a    2017-07-3 16:42:49    firstjeep

我想得到最新的数据。意思是如果有两个相同的汽车识别码,我想根据最新的时间只得到一个。怎么写?
我试着写这个,但我发现可能错了。如果其他记录可能具有相同的创建时间?怎么解决?
SELECT * FROM t_decorate_car
WHERE create_time IN
    (SELECT tmptime FROM
        (SELECT MAX(create_time),tmptime,car_id
         FROM decorate
         GROUP BY car_id
        ) tmp
    )

最佳答案

处理此问题的一种规范方法是将表连接到一个子查询,该子查询查找每个car_id的最新记录。此子查询用作筛选器,以删除您不想看到的旧记录。

SELECT t1.*
FROM t_decorate_car t1
INNER JOIN
(
    SELECT car_id, MAX(create_time) AS max_create_time
    FROM t_decorate_car
    GROUP BY car_id
) t2
    ON t1.car_id      = t2.car_id AND
       t1.create_time = t2.max_create_time

顺便说一下,如果您想继续沿着当前道路行驶,还可以使用相关子查询解决此问题:
SELECT t1.*
FROM t_decorate_car t1
WHERE t1.create_time = (SELECT MAX(t2.create_time) FROM t_decorate_car t2
                        WHERE t2.car_id = t1.car_id)

您在正确的轨道上,但从未使用rightWHERE子句将子查询连接到主查询。

07-24 19:16
查看更多