我有一個表,看起來像下面 - 主要包含時間戳以及其他一些列:最接近時間戳選擇行
WeatherTable
+---------------------+---------+----------------+ +
| TS | MonthET | InsideHumidity | .... |
+---------------------+---------+----------------+ |
| 2014-10-27 14:24:22 | 0 | 54 | |
| 2014-10-27 14:24:24 | 0 | 54 | |
| 2014-10-27 14:24:26 | 0 | 52 | |
| 2014-10-27 14:24:28 | 0 | 54 | |
| 2014-10-27 14:24:30 | 0 | 53 | |
| 2014-10-27 14:24:32 | 0 | 55 | |
| 2014-10-27 14:24:34 | 9 | 54 | |
.......
我試圖制定一個返回的所有行的SQL查詢在一定的時間範圍內(這裏沒有問題),具有一定的任意粒度,例如每15秒。該數字總是以秒爲單位指定,但不限於小於60的值。使事情進一步複雜化,時間戳不一定落在所需的粒度上,所以不是簡單地選擇14:24:00的時間戳,14:24:15,14:24:30等 - 結果中包含與每個值最接近的時間戳的行。
例如,如果開始時間被給定爲14時24分三十○秒,結束時間爲十四時32分00秒,和粒度爲130,理想的時間將是:
14:24:30
14:26:40
14:28:50
14:31:00
然而,那麼每個時間點的時間戳可能不存在,在這種情況下,應該選擇具有與這些理想時間戳中的每個理想時間戳最接近的時間戳的行。在兩個時間戳距離理想時間戳較遠的情況下,應該選擇較早的時間戳。
數據庫是Web服務的一部分,所以目前我只是忽略了SQL查詢的粒度,並在以後用(Java)代碼過濾不需要的結果。然而,這在內存消耗和性能方面似乎還不太理想。
任何想法?
首先您需要建立顯示缺席值的規則。例如,假設您在2014-10-27 14:24:29需要InsideHumidity值。你會說它是54,53或53.5? – Horaciux 2014-11-02 23:27:46
任意粒度總是以秒爲單位<= 60?而且,如果是這樣,如果我們有43,那麼43,83,126都算不算?或者,每43歲? – 2014-11-02 23:31:46
該規則可能是,最後一次已知的價值,加權平均等。此外,您需要知道爲什麼你沒有這個時間戳的價值。是否在採樣頻率,死區內的值,通信錯誤,現場設備故障等方面存在差異。 – Horaciux 2014-11-02 23:35:30