2016-04-21 40 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用戶在同一時間被分配所有權。