2017-07-18 1 views
1

I Tabellendaten ist wie folgt:Wie bekomme ich die maximale und nicht duplizierte Daten in meiner Tabelle in 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 

ich die neuesten Daten erhalten möchten. Es bedeutet, wenn es zwei gleiche car_id gibt, möchte ich nur eine nach der neuesten Zeit bekommen. Wie schreibt man?

Ich versuche, dies zu schreiben, aber ich finde es falsch. Wenn der andere Datensatz die gleiche create_time haben könnte? Wie behebt man das?

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 
    ) 

Antwort

2

Ein kanonischer Weg zu handhaben ist Ihre Tabelle in eine Unterabfrage zu verbinden, die für jeden car_id die neueste Datensatz findet. Diese Unterabfrage dient als Filter zum Entfernen der älteren Datensätze, die Sie nicht sehen möchten.

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 

By the way, wenn Sie unten Ihre aktuelle Straße fortsetzen möchten, können Sie dies auch eine korrelierte Unterabfrage lösen:

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) 

Sie auf dem richtigen Weg waren, aber sie verbunden nie die Unterabfrage zu der Hauptanfrage mit der richtigen WHERE Klausel.

Verwandte Themen