查找数据集中的整个波动

时间:2011-03-02 21:20:42

标签: mysql sql data-analysis

我有一个MySQL数据库中一组坦克的历史数据表。我想发现罐内容量波动大于200加仑/小时。到目前为止,我的SQL语句是:

SELECT t1.tankhistid as start, t2.tankhistid as end
FROM
    (SELECT * from tankhistory WHERE tankid = ? AND curtime BETWEEN ? AND ?) AS t1
INNER JOIN
    (SELECT * from tankhistory WHERE tankid = ? AND curtime BETWEEN ? AND ?) AS t2
    ON t1.tankid = t2.tankid AND t1.curtime < t2.curtime
WHERE TIMESTAMPDIFF(HOUR, t1.curtime, t2.curtime) < 1 AND ABS(t1.vol - t2.vol) > 200
ORDER BY t1.tankhistid, t2.tankhistid

在上面的代码中,curtime是插入记录时的时间戳,tankhistid是表整数主键,tankid是单独的tank id,vol是读数。

这会返回太多结果,因为数据每5分钟收集一次,波动可能需要数小时(多行具有相同的ID,最后是开始列),或者只是超过10分钟(多行具有相同的开头或结尾) ID)。示例输出:

7514576,7515478
7515232,7515478
7515314,7515478
7515396,7515478
7515478,7515560
7515478,7515642
7515478,7515724

请注意,所有这些行都应该只有一个:7514576,7515724。对于坦克数据的一天,查询需要4分钟,因此任何加速都会很好。我猜有一种方法可以获取当前查询并将其用作子查询,但我不知道如何进行过滤。

0 个答案:

没有答案