2016-04-21 10 views
-2

Ich habe die folgende Tabelle 'Ereignisse'.SQLite3 letztes Ereignis von Benutzer auswählen

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

Ich möchte die Vermögenswerte wählen, in dem Benutzer ‚a‘ war der letzte Benutzer mit einem ‚Eigentümer‘ event_type. In diesem Beispiel sind also die IDs 1, 3 und 6 (die Assets 10, 20 und 30 gehören dem Benutzer 'a').

Grundsätzlich, basierend auf den Ereignissen, möchte ich die Assets des Benutzers 'a' finden. Diese

+0

Und was ist mit Asset 30? –

+0

Ihr richtig, ich werde die Frage update. – user3181422

+0

Was genau ist die Frage? – glibdud

Antwort

0

ist, was korrelierte Unterabfragen sind für:

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') 

Werden Sie das Ereignis geben, das „für jeden Vermögenswert, der letzte Besitz Veranstaltung zeigen“. Wenn Sie es für bestimmte Vermögenswerte oder spezifische Besitzer möchten, fügen Sie einfach eine entsprechende WHERE-Klausel

Ihre Frage ist reif für einen Bruch, wenn Sie die Eindeutigkeit von {time, event_type, asset} nicht garantieren. Dies gibt alle n Zeilen zurück, wenn Sie n Benutzer genau zur gleichen Zeit Besitz zugewiesen haben.