2011-01-14 2 views
2

Я такую ​​ситуацию:Получить предыдущую дату и время из таблицы в SQLite

В таблице у меня есть 4 колонки:

CommentsTBL: 
ID int 
Data datetime 
Hour Varchar 
Comment Varchar 

Столбец Час типа VARCHAR, не спросите меня, почему ....

Учитывая конкретную дату и час из таблицы, мне нужно найти предыдущую и следующую запись. Если я найду одну из них (предыдущую или следующую), будет легко получить другую, используя ту же логику.

В качестве примера:

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 

Предыдущая дата ID 4 будет ID 1, а следующий будет ID 2.

Я придумал решение для этого, но я хочу чтобы увидеть, есть ли у кого-нибудь что-то лучшее, возможно, используя только один SELECT. Это относится к предыдущему:

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 

Спасибо.

ответ

3

Почему нет:

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

Отлично. Я не знал, что в SQLite есть опция LIMIT. Благодарю. – CristiC

Смежные вопросы