2013-03-21 108 views
1

我有兩個包含datetime和double的表格。根據日期時間對錶格中的數據進行排序datetime

,看起來像這樣:

mysql> select * from ONE;   | mysql> select * from TWO; 
+---------------------+----------+ | +---------------------+----------+ 
| date    | value | | | date    | value | 
+---------------------+----------+ | +---------------------+----------+ 
| 2002-03-18 10:30:02 | -181.241 | | | 2002-03-18 10:30:00 | -188.192 | 
| 2002-03-18 10:30:06 | -180.673 | | | 2002-03-18 10:30:04 | -187.619 | 
| 2002-03-18 10:30:10 | -180.055 | | | 2002-03-18 10:30:08 | -187.032 | 
| 2002-03-18 10:30:14 | -179.459 | | | 2002-03-18 10:30:12 | -186.418 | 
| 2002-03-18 10:30:18 | -178.801 | | | 2002-03-18 10:30:16 | -185.807 | 

我想對從每一個共同的日期列的表值的查詢(使用ONE.date作爲參考)。但是,在某些情況下,測量值沒有對稱日期。以上是這種時間段的一個例子(這是最壞的情況),這裏表TWO的值對應於兩秒後表1中的值。

爲了根據時間對兩個表格的值進行排序,我希望允許「排序準確性」,它被設置爲一個「事件」的測量之間的最大時間差。這種精度在這種情況下是2秒。

我該怎麼看:如果ONE.data和TWO.date之間的時差小於+ - 2秒;加入來自TWO的值:

mysql> select * from ONE;   
+---------------------+----------+-----------+ 
| date    | valueONE | valueTWO | 
+---------------------+----------+ ----------+ 
| 2002-03-18 10:30:02 | -181.241 | -188.192 | 
| 2002-03-18 10:30:06 | -180.673 | -187.619 | 
| 2002-03-18 10:30:10 | -180.055 | -187.032 | 
| 2002-03-18 10:30:14 | -179.459 | -186.418 | 
| 2002-03-18 10:30:18 | -178.801 | -185.807 | 

如果差值大於+ - 2秒,則放棄測量。 這是我已經嘗試過,但下面的查詢只是超時。

SELECT ONE.date, ONE.value, TWO.date, TWO.value 
FROM ONE 
    join TWO on ONE.date = TWO.date+INTERVAL 1 SECOND or ONE.date = TWO.date 

是它有一個IF句子可能裏面的連接語句等,如果

if SELECT TIMESTAMPDIFF(SECOND,'2002-03-18 10:30:02','2002-03-18 10:30:00') <= 2, then join 
+1

在您的示例中,TWO中的時間戳也對應於ONE中的時間戳,但是兩秒後。看來你希望ONE中的時間系列帶頭組裝結果集。那是對的嗎?從兩個行中選擇行來匹配ONE行時,JOIN是否應該同時考慮未來和過去?另外,如果在ONE中單行的匹配範圍內有兩行中有多行,或者反過來,您希望發生什麼? – 2013-03-21 11:57:28

+0

感謝您的關注。 fthiella的答案是我所需要的。 但是,你做出了卓越的觀點。是的,我選擇ONE作爲參考(率先彙總結果),是的,我試圖在選擇行時使聯合聲明看起來向前和向後看。最後,好點。這可能是另一種情況下的問題,但是,在我的數據集中,時間戳不會超過3.95秒。謝謝 – Paulten 2013-03-21 12:14:26

回答

1

你可以使用BETWEEN:

SELECT ONE.date, ONE.value value_ONE, TWO.value value_TWO 
FROM 
    ONE join TWO 
    on ONE.date BETWEEN TWO.date AND TWO.date + INTERVAL 2 SECOND 
ORDER BY ONE.date 

請參閱小提琴here

+0

完美。非常感謝你,非常感謝。 – Paulten 2013-03-21 12:13:24

相關問題