【发布时间】:2013-02-28 16:06:29
【问题描述】:
在 mysql 中,我正在计算不同时间间隔(3 天、7 天、30 天、60 天等)的相同指标的平均值,并且我需要将结果放在每个 @987654321 的一行中@。
目前,我在每个间隔都使用一个 Join。鉴于我必须为许多不同的商店计算这个,并且在几个不同的时间间隔内,有没有更清洁和/或更有效的方法来完成这个?
下面是我目前使用的代码。
提前感谢您的帮助
SELECT T1.id, T1.DailySales_3DayAvg, T2.DailySales_7DayAvg
FROM(
SELECT id, avg(DailySales) as 'DailySales_3DayAvg'
FROM `SalesTable`
WHERE `Store`=2
AND `Date` >= DATE_SUB('2012-07-28', INTERVAL 3 DAY)
AND `Date` < '2012-07-28'
) AS T1
JOIN(
SELECT id, avg(DailySales) as 'DailySales_7DayAvg'
FROM `SalesTable`
WHERE `Store`=2
AND `Date` >= DATE_SUB('2012-07-28', INTERVAL 7 DAY)
AND `Date` < '2012-07-28'
) AS T2
ON T1.ArtistId = T2.ArtistId
结果在哪里:
id DailySales_3DayAvg DailySales_7DayAvg
3752 1234.56 1114.78
...
【问题讨论】:
-
不,我不认为有...除非您想在从 mySQL 获取数据之后在接收程序中生成平均值...尽管子查询至少会删除'加入'。 (但并没有更漂亮)
-
“平均”是什么意思? “超过一个区间”是什么意思?目前,您正在获取 SalesTable(对于给定商店)中属于相应日期范围内的所有记录的平均值
DailySales。但是,这不是该期间的“平均每日销售额”:考虑商店在时间间隔内的特定日期有多个(或没有)记录时会发生什么情况:也许您希望取所有销售额的总和并除以天数?更明确地定义问题,然后我们可以帮助提出可能的答案。 -
@RefugnicEternium,感谢您的回复。数据是历史数据,然后进入 R。我可以在 R 中轻松计算它,但在 sql 中执行它要快得多。看起来我坚持使用代码。谢谢。
-
@eggyal,感谢您的反馈,但我对此非常了解。此外,平均值按预期计算(即,如果有缺失值,例如 7 天内只有 3 条记录,则平均值计算为
sum(vals) / 3)。