2011-01-17 18 views
12

Tengo un LoginTime tabla como la siguiente:¿Cómo suprimir último registro (la condición) de una tabla en 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 

Quiero borrar el último registro para user_id=1. El último registro de un usuario puede ser reconocido por datetime.

¿Cómo puedo hacer esto con una consulta?

Respuesta

25

Necesita filtrar la tabla por ID_usuario (p. Ej. DONDE ID_usuario = 1), luego ordenarla por tiempo (p. Ej. ORDENAR fecha y hora) y limitar la consulta a un solo elemento (p. Ej. LÍMITE 1) y eliminar el resultado de esta consulta. Al final youl obtener consulta como esta:

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

lo que si hubo 2 registros para user_id = 1 con la misma fecha y hora máxima se eliminarán – nan

+0

... Uno de ellos puede ser o no tiene sentido dependiendo del escenario. –

+0

En este caso, generalmente usaría el id en lugar de una marca de tiempo para determinar el último. Si id está configurado para autoincrementar, la última entrada en el archivo db siempre tendrá la identificación más alta (por ejemplo, DELETE DE LoginTime DONDE user_id = 1 ORDER 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

Me temo que esto aumentará el error sql 1093: * No se puede especificar la tabla de destino '' para la actualización en la cláusula FROM * –

+0

@ Salman A Gracias, lo corrigí. – nan

+0

Gracias por su respuesta. Se ve complejo pero útil. Consideré simple. – Awan

0
DELETE FROM table name 
RIGHT JOIN (SELECT COUNT(primary key) 
      FROM table name) 
Cuestiones relacionadas