我有以下情况:
在表格中我有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
感谢。
答案 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
)