繁体   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