我有下表;
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。
有人可以帮忙建议一种能给我预期效果的方法吗?
答案 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
)