2016-04-21 42 views
-2

我有下面的表'事件'。SQLite3选择用户的最后一个事件

| id | event_type | by_user | asset |  time | 
| 1 | owner  | a  | 10 | 1111111111 | 
| 2 | updated | b  | 20 | 1111111112 | 
| 3 | owner  | a  | 30 | 1111111113 | 
| 4 | owner  | c  | 20 | 1111111114 | 
| 5 | updated | a  | 10 | 1111111115 | 
| 6 | owner  | a  | 20 | 1111111118 | 

我想选择其中用户“A”是最后用户 与“所有者” EVENT_TYPE资产。因此,在此示例中,ID的1,3和6( 资产10,20和30由用户'a'拥有)。

基本上,基于事件,我想查找用户'a'拥有的资产。

+0

那么资产30呢? –

+0

你的正确,我会提出问题。 – user3181422

+0

问题到底是什么? – glibdud

回答

0

这是相关子查询是:

SELECT * FROM events e 
    WHERE event_type='owner' 
    AND time=(SELECT MAX(e_inner.time) FROM events e_inner 
     WHERE e_inner.asset=e.asset AND e_inner.event_type='owner') 

会给你是“为每个资产,显示最后所有权事件”的事件。如果您希望针对特定资产或特定所有者,只需添加适当的WHERE子句

如果您不保证{time,event_type,asset}的唯一性,那么您的问题已经成熟。这将返回所有n行,如果您有n用户在同一时间被分配所有权。