我有兩個包含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
在您的示例中,TWO中的時間戳也對應於ONE中的時間戳,但是兩秒後。看來你希望ONE中的時間系列帶頭組裝結果集。那是對的嗎?從兩個行中選擇行來匹配ONE行時,JOIN是否應該同時考慮未來和過去?另外,如果在ONE中單行的匹配範圍內有兩行中有多行,或者反過來,您希望發生什麼? – 2013-03-21 11:57:28
感謝您的關注。 fthiella的答案是我所需要的。 但是,你做出了卓越的觀點。是的,我選擇ONE作爲參考(率先彙總結果),是的,我試圖在選擇行時使聯合聲明看起來向前和向後看。最後,好點。這可能是另一種情況下的問題,但是,在我的數據集中,時間戳不會超過3.95秒。謝謝 – Paulten 2013-03-21 12:14:26