2011-01-17 23 views
12

Ho un LoginTime tabella come questa:Come eliminare ultimo record (delle condizioni) da una tabella in MySql

id | user_id | datetime 
1 | 1  | 2011-01-17 18:51:05 
2 | 1  | 2011-01-18 18:51:05 
3 | 1  | 2011-01-19 18:51:05 
4 | 2  | 2011-01-19 18:51:05 

voglio cancellare l'ultima record per user_id=1. L'ultimo record di un utente può essere riconosciuto da datetime.

Come posso fare questo con una query.

risposta

25

È necessario filtrare la tabella in base a user_id (ad es. WHERE user_id = 1), quindi ordinare per ora (ad es. ORDER BY datetime) e quindi limitare la query a un solo elemento (ad es. LIMIT 1) ed eliminare il risultato di questa query. Alla fine youl ottenere query come questa:

DELETE FROM LoginTime WHERE user_id=1 ORDER BY datetime DESC LIMIT 1 
+0

cosa se ci fossero 2 record per user_id = 1 con la stessa datetime massima – nan

+0

Uno di loro sarà eliminato ... può o non può ha senso in base allo scenario. –

+0

In questo caso userei solitamente id invece di un timestamp per determinare l'ultimo. Se id è impostato su auto-increment, l'ultima voce nel db avrà sempre l'id più alto (es. DELETE FROM LoginTime WHERE user_id = 1 ORDINE BY id DESC LIMIT 1) – Ivan

2
DELETE FROM logintime t1 
    JOIN 
    (
    SELECT MAX(datetime) 
     AS max_dt 
     FROM logintime 
     WHERE user_id = 1 
    ) t2 
WHERE t1.datetime = t2.max_dt 
    AND user_id = 1 
+0

Temo che ciò causerà l'errore sql 1093: * Non è possibile specificare la tabella di destinazione '' per l'aggiornamento nella clausola FROM * –

+0

@Salman A Grazie, l'ho corretto. – nan

+0

Grazie per la risposta. Sembra complesso ma utile. Ho considerato semplice. – Awan

0
DELETE FROM table name 
RIGHT JOIN (SELECT COUNT(primary key) 
      FROM table name) 
Problemi correlati