I have a table [user_logs] with the following fields [username], [datetimelog]
Sample Data
==============
user1 2011-06-28 08:49:01
user2 2011-06-28 08:59:38
user3 2011-06-28 09:04:31
user4 2011-06-28 10:00:15
user2 2011-06-28 10:28:54
user1 2011-06-29 08:31:22
user9 2011-06-29 08:32:32
user2 2011-06-29 10:13:53
user1 2011-06-29 13:11:15
I want to know how to create an SQL Delete query to delete all user logs EXCEPT their last log so that the above example will produce the following after a DELETE query
user1 2011-06-29 13:11:15
user2 2011-06-29 10:13:53
user3 2011-06-28 09:04:31
user4 2011-06-28 10:00:15
user9 2011-06-29 08:32:32
What about:
DELETE FROM
MY_TABLE M -- delete from the table
LEFT JOIN
MY_TABLE M2 ON M.user = M2.user -- table needs to be joined TO ITSELF
WHERE
NOT M.LOG_DATE = MAX( M2.LOG_DATE ) -- Anything which isn't MAX goes.
Could that work?
DELETE FROM table a WHERE time != (SELECT MAX(time) FROM table b WHERE b.user=a.user);
Here delete a row, if its not the maximum time in group with the same user_id
DELETE from user_logs UL1, user_logs UL2
where UL1.username =UL2.datetimelog
and UL1.datetimelog < UL2.datetimelog
Try that
来源:https://stackoverflow.com/questions/6517664/deleting-records