【发布时间】:2012-06-04 08:42:47
【问题描述】:
我有一个表 events,其中包含用户事件,例如:
PK | user | event_type | timestamp
--------------------------------
1 | ab | DTV | 1
2 | ab | DTV | 2
3 | ab | CPVR | 3
4 | cd | DTV | 1
5 | cd | DTV | 2
6 | cd | DTV | 3
我想要做的是每个user 只保留一个事件,即具有最新timestamp 和event_type = 'DTV' 的事件。
对上面的示例应用删除后,表格应如下所示:
PK | user | event_type | timestamp
--------------------------------
2 | ab | DTV | 2
6 | cd | DTV | 3
你们中的任何人都可以想出完成这项任务的方法吗?
更新:我正在使用 Sqlite。这是我目前所拥有的:
delete from events
where id not in (
select id from (
select id, user, max(timestamp)
from events
where event_type = 'DTV'
group by user)
);
我很确定这可以改进。有什么想法吗?
【问题讨论】:
-
我们在帮助那些无法帮助自己或不尝试的人方面非常糟糕。
-
你的数据库系统是什么?
-
你试过什么?你离解决方案有多近?请使用该信息更新您的问题。
-
对于
user,timestamp是唯一的吗?
标签: sql sqlite group-by sql-delete