从SQLite中的表中获取上一个日期和小时

时间:2011-01-14 09:10:31

标签: sqlite

我有以下情况:

在表格中我有4列:

CommentsTBL:
ID int
Data datetime
Hour Varchar
Comment Varchar

Hour列是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

感谢。

1 个答案:

答案 0 :(得分: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
       )