2011-06-29 240 views
1

我有一个表[user_logs]具有以下字段[用户名],[datetimelog]删除记录

样本数据

============== 
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 

我想知道如何创建一个SQL删除查询删除所有用户登录EXCEPT他们最后的日志,以便上面的例子会产生一个DELETE查询

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 
+0

我只知道DELETE FROM表WHERE ....但不知道如何通过这种情况下的条件。 – Lorence

回答

0

什么后执行以下操作:

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. 

可以工作吗?

0
DELETE FROM table a WHERE time != (SELECT MAX(time) FROM table b WHERE b.user=a.user); 

这里删除一行,如果它不是在组的最大时间以相同USER_ID

0
DELETE from user_logs UL1, user_logs UL2 
where UL1.username =UL2.datetimelog 
and UL1.datetimelog < UL2.datetimelog 

试一下

+0

UL1.username = UL2.datetimelog应该是UL2.username – Friedrich