簡體   English   中英

SQL在時間序列表的時間窗口內獲取聚合值

[英]SQL get aggregate value within a time-window in a time-series table

我試圖使用SQLite / sqlalchemy在Python中編寫SQL方法,以基於包含原始時間序列數據的另一個表構建一個新表,該表包含特定時間段內的被分析數據,例如均值,中位數,最大值,var 。

假設原始數據是並且時間戳未均勻分布。 我想獲得另一個表:從原始數據表,它基本上是60秒滑動時間窗口內的合計值,例如:

RAW:
TIME      VALUE
11:11:12   12
11:11:22   24
11:11:34   16
11:12:21   18
11:12:45   22
11:13:03   15

我想得到:

ID  WINDOW_TIME      MEAN            MEDIAN         MAX       VAR
1      11:11    mean(12,24,16)   med(12,24,16) ...
2      11:12    mean(18,22)      ...
3      11:13    ...
...

如何根據時間戳對數據進行分組?

如果您的TIME列是時間類型( https://dev.mysql.com/doc/refman/5.7/en/time.html ),則可以在group by中執行類似的操作。

GROUP BY TIME_FORMAT(`TIME`, '%H:%i')

另一方面,如果該列只是一個字符串類型,則情況會有些棘手。 我想,如果可以保證每個值的格式都為hh:ii:ss,則可以使用SUBSTRING

GROUP BY SUBSTRING(`TIME` FROM 1 FOR 5)

但是,如果您選擇使用這些選項中的任何一個,那么我確實希望您的數據庫中沒有記錄,因為我非常確定這些選項中的每一個在性能方面都會很糟糕。 我還沒有進行廣泛的測試,但是我認為mysql在兩個示例中都不能使用索引。

老實說,最好不要為每個記錄創建一個包含時間為hh:ii的表,然后將該表用於匯總查詢,而不是嘗試在所有查詢中都這樣做。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM