这是我的查询:
SELECT DISTINCT id, stat, date, user_id
FROM data AS T1
WHERE 2.0 >= (
SELECT avg1
FROM (
SELECT stat, AVG(value) AS avg1
FROM data
WHERE date > SUBTIME(NOW(), MAKETIME(168, 0, 0))
GROUP BY stat_name) b1
WHERE stat = T1.stat
AND id = T1.id)/
(
SELECT avg2
FROM (
SELECT stat, AVG(value) AS avg2
FROM cata
WHERE date > SUBTIME(NOW(), MAKETIME(336, 0, 0))
AND date <= SUBTIME(NOW(), MAKETIME(168, 0, 0))
GROUP BY stat) b2
WHERE stat = T1.stat
AND id = T1.id)
ORDER BY id;
这个想法是我创建了一个统计数据表,其本周的平均值是上周平均值的两倍多。
我的问题是:我想为每个统计数据选择一个表示 MAX(本周值)- MAX(上周值)的列 diff_values,表示过去一周的增长。(基本上,今天创建的 stat 条目是昨天的 stat 加上增加。)如果不创建两个类似于 WHERE 子句中的子查询,我想不出一种方法,但这样做会使查询执行时间增加真的很长,因为数据是一个很大的表。
有没有办法在现有子查询之间拆分数学?