我有一个很好的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。
提前感谢任何指导。
米奇
答案 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
或其他什么。