2017-07-18 26 views
1

我表中的数据是这样的:如何获得MySQL中我的表中最大和非重复的数据?

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 

我想要得到的最新数据。这意味着如果有两个相同的car_id,我想根据最新的时间只有一个。怎么写?

我尝试写这个,但我发现它可能是错的。如果其他记录可能具有相同的create_time?如何解决这个问题?处理这种

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 
    ) 

回答

2

一种典型方式是将表连接到查找每个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) 

你在正确的轨道上,但你永远不连接的子查询到使用正确的WHERE子句的主查询。

相关问题