2016-12-22 4 views
1

Duplikat ist eine Tabelle status ist, die Daten enthält, wie unten dargestellt:andorid-db-Abfrage letzte Aufzeichnungen oder erste von der Gruppe zu erhalten, wenn der letzte Datensatz früheren

Id Status  TimeStamp 
------------------------- 
1 StatusC  1234561 
2 StatusC  1234562 
3 StatusB  1234563 
4 StatusA  1234564 
5 StatusA  1234565 
6 StatusA  1234566 

Welche Abfrage wird das folgende Ergebnis zurück ?

Id Status  TimeStamp 
------------------------- 
4 StatusA  1234564 

Ein weiteres Beispiel:

Id Status  TimeStamp 
------------------------- 
1 StatusC  1234561 
2 StatusC  1234562 
3 StatusB  1234563 
4 StatusA  1234564 
5 StatusA  1234565 
6 StatusB  1234566 

Ergebnis:

Id Status  TimeStamp 
------------------------- 
6 StatusB  1234566 

So möchte ich den Rekord letzten Status, wenn sie von vorherigen oder wenn der vorhergehende der letzten ist der gleiche Status unterscheidet dann der Erste dieser Gruppe. Ich habe versucht paar Sache, aber ich bekomme nicht das gewünschte Ergebnis. Gibt es effiziente Möglichkeiten, um das Ergebnis zu erreichen?

+0

ist die id-Spalte sequenziellen ohne Lücken? –

+0

@vkp ja, das sind sie – coder1087

Antwort

1

Sie wollen die früheste (niedrigste Zeitstempel) Datensatz (Zeile) mit dem gleichen Status als die neuesten (höchster Zeitstempel) Reihe, aber das muss nicht ein andere Zeile, nachdem es mit einem anderen Status.

versuchen Sie dies:

Select * 
from table p 
where p.Timestamp = 
    (Select min(TimeStamp) from table x 
     where status = 
      (Select Status from table 
      Where timestamp = 
       (Select Max(timestamp) From table)) 
      and not exists 
       (Select * from table 
        Where timestamp > x.timeStamp 
         and status != p.Status)) 
Verwandte Themen