我有一个带有列
的“读数”表timestamp
作为DateTime channel_id
为整数value
为十进制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 :(得分: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)