2011-01-14 6 views
2

ich folgende Situation haben:Holen Sie sich das vorherige Datum und Uhrzeit aus einer Tabelle in SQLite

In einer Tabelle Ich habe 4 Spalten:

CommentsTBL: 
ID int 
Data datetime 
Hour Varchar 
Comment Varchar 

Die Stunde Spalte varchar Typ ist, nicht Fragen Sie mich, warum ....

Gegeben ein bestimmtes Datum und eine Stunde aus der Tabelle, ich muss den vorherigen und den nächsten Datensatz finden. Wenn ich eines von ihnen finden werde (vorheriges oder nächstes), wird es einfach sein, das andere mit derselben Logik zu bekommen.

Als Beispiel:

ID Data  Hour Comment 
1. 2011-01-12 17:00 SomeComments1 
2. 2011-01-14 10:00 SomeComments3 
3. 2011-01-14 11:00 SomeComments4 
4. 2011-01-13 14:00 SomeComments2 

Der bisherige Termin für ID 4 ID 1 und die nächste ID wird 2.

ich für diese kam mit einer Lösung sein würde, aber ich will um zu sehen, ob einer von euch etwas Besseres hat, vielleicht mit nur einem SELECT. Dies ist für die vorherige:

SELECT 
     Data, 
     MAX(Hour) Hour 
FROM 
     CommentsTBL 
WHERE 
     Data in (SELECT 
         MAX(Data) 
       FROM 
         CommentsTBL 
       WHERE 
         Data < MyDate or (Data = MyDate and Hour < MyHour) 
       ) 
GROUP BY 
     Data 

Danke.

Antwort

3

Warum nicht:

select * 
    from (SELECT data, hour from commentsTbl 
      where data < mydate 
      or (data = mydate and hour < myhour) 
      order by data desc, hour desc 
      limit 1 
     ) 
union all 
select * 
    from (SELECT data, hour from commentsTbl 
      where data > mydate 
      or (data = mydate and hour > myhour) 
      order by data asc, hour asc 
      limit 1 
     ) 
+0

Excellent. Ich wusste nicht, dass es die Option LIMIT in SQLite gibt. Vielen Dank. – CristiC

Verwandte Themen