- 编号------日期时间------------------
| -1- | --- 2015-09-07 23:36:05-- |
| -2- | --- 2015-09-07 23:36:03-- |
| -3- | --- 2015-09-07 23:36:02-- |
| -4- | --- 2015-09-07 23:36:06-- |
| -5- | --- 2015-09-07 23:36:01-- |
| -7- | --- 2015-09-07 23:36:04-- |
我有参数ID,例如3,限制为6,所以我写了最近行的where子句,包括中间的行,如:
(id> 3 - (限制/ 2))限制6
但现在我得到了日期,我需要选择最接近的行(如果限制为6,那么结果3行<比$ DATE和3行> $ DATE。
我编写了2个运行正常或联合选择的查询,但我想找到一个解决方案,只使用一个简单的查询,如果有人有提示。非常感谢。
答案 0 :(得分:0)
如果您需要最近的行,则可以计算每行的日期与提供的日期之间的差异(例如,以秒为单位)。
然后通过差异获得ABS值和顺序。
类似的东西:
select id
from table
order by ABS(TIMESTAMPDIFF(SECOND, '2015-09-07 23:36:03', the_date))
LIMIT 4
修改强>
如果您想按日期订购结果,可以将以前的查询视为子查询,然后重新排序:
select id, the_date
from (
select id, the_date
from the_dates
order by ABS(TIMESTAMPDIFF(SECOND, '2015-09-07 23:36:02', the_date))
LIMIT 4
) a
order by a.the_date
SQLFiddle:http://sqlfiddle.com/#!9/64517/9/0