过滤具有时差的行

时间:2016-05-25 04:01:19

标签: mysql sql

我有一个带有列

的“读数”表
  1. timestamp作为DateTime
  2. channel_id为整数
  3. value为十进制
  4. test_id为整数
  5. 现在我想按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
    

1 个答案:

答案 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)