SQL在时间序列表的时间窗口内获取聚合值

时间:2017-07-27 20:58:34

标签: python sql sqlite

我正在尝试使用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    ...
...

如何根据时间戳对数据进行分组?

1 个答案:

答案 0 :(得分:0)

如果您的TIME列属于时间类型(https://dev.mysql.com/doc/refman/5.7/en/time.html),则可以在组中执行此类操作。

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

另一方面,如果列只是一个字符串类型,事情就有点棘手了。我想,如果你能保证每个值的格式为hh:ii:ss,你可以使用SUBSTRING

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

但是,如果你选择其中任何一个选项,我真的希望,为了你的缘故,你的数据库中缺少记录,因为我很确定这些选项中的每个选项都会很糟糕。性能。我没有做过大量的测试,但我认为mysql不会在任何一个例子中使用索引。

老实说,你可能最好创建一个包含时间为hh:ii的表,然后使用该表进行聚合查询,而不是在所有查询中尝试执行此操作。