2016-05-25 35 views
0

我有列的 「讀數」 表使用時間差篩選行

  1. timestamp爲DATETIME
  2. channel_id作爲整數
  3. value爲十進制
  4. test_id作爲整數

現在我想通過test_id哪個過濾行可以做任何人。然後在結果中的行數太多。假設如果我使用channel number 2,3 and 5作爲我的test_id 17,並且如果我每秒記錄數據,那麼有10k行。

當我繪製圖表時,會出現很多數據以致圖形線條不可見清晰,因此爲了使它們可見,我需要過濾掉一些行。

我需要一些幫助,在兩個記錄之間的時間差的行過濾應該是幾秒鐘可以說10秒。在這個數據是不連續的。

任何幫助將不勝感激。

的樣品數據將是如下:

24-05-2016 08:00:55 am | 2 | 10.23 | 17 

24-05-2016 08:00:55 am | 3 | 100.23 | 17 

24-05-2016 08:00:55 am | 5 | 12.23 | 17 

24-05-2016 08:00:56 am | 2 | 09.23 | 17 

24-05-2016 08:00:56 am | 3 | 12.23 | 17 

24-05-2016 08:00:56 am | 5 | 11.23 | 17 

24-05-2016 08:00:57 am | 2 | 09.23 | 17 

24-05-2016 08:00:57 am | 3 | 01.23 | 17 

24-05-2016 08:00:57 am | 5 | 11.23 | 17 

24-05-2016 08:00:58 am | 2 | 09.23 | 17 

24-05-2016 08:00:58 am | 3 | 01.23 | 17 

24-05-2016 08:00:58 am | 5 | 11.23 | 17 
+0

那麼你的預期結果是什麼? – 1000111

+0

你的樣本數據會有什麼結果?任何時間之間沒有10秒的差異。 –

+0

如果我想要2秒或更長的時間差的行,那麼數據將可用於每個「2,3和5」頻道,第一個數據將於24-05-2016 08:00:55 am開始,接下來的數據將會在24-05-2016 08:00:57上午再次爲所有渠道2,3和5. –

回答

1

相反濾波可以使用GROUP BY功能期間聚集的數據。例如,10秒的時間段可從時間戳使用該公式計算:

ROUND(UNIX_TIMESTAMP(timestamp)/10) 

所以,這個公式可以被添加到GROUP BY查詢,因此查詢可以在該期間聚集數據:

SELECT test_id,channel_id,ROUND(UNIX_TIMESTAMP(timestamp)/10), 
    min(value), max(value), avg(value),count(*) 
FROM your_table 
WHERE some_conditions 
GROPU BY test_id,channel_id,ROUND(UNIX_TIMESTAMP(timestamp)/10) 
+0

偉大的@amaksr。 99.99%我的問題得到解決,除了當我嘗試10秒的時間段,它給了我8秒的時間段的數據。我的數據從'2016-05-24 14:51:37'開始,所以下一個數據應該在10秒或更長時間,但不會在此之前,因此它會生成'2016-05-24 14:51:47'或更高版本,但它顯示'2016-05-24 14:51:45'的數據並跳過數據於'2016-05-24 14:51:47' –

+0

您的解決方案適用於某些querries。如果我想要2秒鐘的數據,它也會給我不需要的行。任何改進的可能性? –