2013-12-20 74 views
0

我有下表;在MySQL中查找最近的時間和之後的時間

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

等等等等

現在,給定一個日期時間dt,我希望能夠之前dt後找到最接近的EndCalTime。在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

這MSSQL樣本你提供的肯定不會工作,因爲它缺少一個「GROUP BY」子句 - 這也是MySQL給出「隨機」結果的確切原因。 –

回答

1

你可以試試嗎?

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

當然!沒有想到只是這樣做!好一個。謝謝。 – Trent

+0

@FizzBu​​zz我的榮幸;-) –

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 
) 
+0

我喜歡第一個查詢,它很獨特和簡單。雖然我不但需要這兩個賬單,還需要兩個賬單。第二個查詢只是InoS答案的聯合,因爲他們首先回答我會接受他們的答案。不過謝謝。 – Trent