MYSQL查询查找计数的变化

时间:2014-11-03 02:05:27

标签: mysql sql

我有一个很好的SQL查询(由非常有用的FoxyGen提供),它从大量指标中返回一组特定的信息。

SELECT SUM(metric_activeSessions), 
       MAX(metric_timeStamp) as max_time, 
       MIN(metric_timeStamp) as min_time
FROM metrics_tbl 
WHERE metric_timeStamp > NOW() - INTERVAL 60 MINUTE 
GROUP BY unix_timestamp(metric_timeStamp) div 300

我正在试图弄清楚我是否可以在现有查询中添加一些内容,这些查询只返回值相差很大的相邻结果。

例如,如果结果是:

1. 2334 @ 12:01
2. 2134 @ 12:05

在这种情况下,结果2的计数改为-100。

提前感谢任何指导。

米奇

1 个答案:

答案 0 :(得分:0)

您可以使用MySQL中的变量来计算差异:

SELECT s, max_time, min_time,
       (case when (@x := @sprev) is null then NULL
             when (@sprev := s) is null the NULL
             else @x
        end) as sprev
FROM (SELECT SUM(metric_activeSessions) as s, MAX(metric_timeStamp) as max_time,
             MIN(metric_timeStamp) as min_time
      FROM metrics_tbl
      WHERE metric_timeStamp > NOW() - INTERVAL 60 MINUTE
      GROUP BY unix_timestamp(metric_timeStamp) div 300
     ) t CROSS JOIN
     (SELECT @sprev := NULL) vars
order by max_time;

然后,您可以使用having子句测试您喜欢的任何差异:

having s - sprev >= 100

或其他什么。