在MySQL中查找前后最接近的时间

时间:2013-12-20 00:16:30

标签: mysql

我有下表;

CalibrationID |     EndCalTime
     1        | 2013-12-20 08:11:13
     2        | 2013-12-20 08:13:30
     3        | 2013-12-20 08:15:26

等等。

现在,给定DateTime dt,我希望能够在EndCalTime之前和之后找到最接近的dt。在MSSQL中,我可以执行SELECT CalibrationID, MIN(timediff) FROM CalTable之类的操作并获得预期的结果。

然而,在MySQL中,似乎并非如此。这个查询; SELECT CalibrationID, MIN(TIME_TO_SEC(TIMEDIFF(@StabTime, EndCalTime))) FROM CPCalibrations WHERE EndCalTime < @StabTime;总是给我一个ID,即使我知道ID是7。

有人可以帮忙建议一种能给我预期效果的方法吗?

2 个答案:

答案 0 :(得分:1)

你可以尝试一下吗?

SELECT CalibrationID, EndCalTime
FROM CPCalibrations
WHERE EndCalTime < @StabTime
ORDER BY EndCalTime DESC
LIMIT 1

答案 1 :(得分:1)

如果您想要最接近的时间之前或之后:

select c.*
from CPCalibrations c
order by abs(timestampdiff(MICROSECOND, EndCalTime, @StabTime))
limit 1;

如果你想要最接近之前和最接近之后(作为两行):

(select c.*
 from CPCalibrations c
 where EndCalTime < @StabTime
 order by EndCalTime desc
 limit 1
) union all
(select c.*
 from CPCalibrations c
 where EndCalTime > @StabTime
 order by EndCalTime asc
 limit 1
)