2017-07-18 2 views
1

I表のデータは、このようなものです: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が2つある場合は、最新の時刻に1つしか取得しません。書き方?

私はこれを書こうとしますが、間違っている可能性があります。他のレコードが同じ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節を使用してメインクエリに追加します。

関連する問題