1

在 mysql 中,我正在计算不同时间间隔(3 天、7 天、30 天、60 天等)内相同指标的平均值,并且我需要将结果放在每个id.

目前,我每个间隔都使用一个 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
...
4

2 回答 2

2

您可以使用这样的查询 -

SELECT
  id,
  SUM(IF(date >= '2012-07-28' - INTERVAL 3 DAY, DailySales, 0)) / 
    COUNT(IF(date >= '2012-07-28' - INTERVAL 3 DAY, 1, NULL)) 'DailySales_3DayAvg',

  SUM(IF(date >= '2012-07-28' - INTERVAL 7 DAY, DailySales, 0)) / 
    COUNT(IF(date >= '2012-07-28' - INTERVAL 7 DAY, 1, NULL)) 'DailySales_7DayAvg'
FROM
  SalesTable
WHERE
  Store = 2 AND Date < '2012-07-28'
GROUP BY
  id
于 2013-02-28T16:40:55.843 回答
1

如果您想提取实时数据,我认为您无法以任何其他方式执行此操作。但是,如果您能负担得起显示稍微过时的数据,您可以为每个项目预先计算这些平均值(例如每天一次或两次)。

您可能想查看Event Scheduler,它允许您将所有内容保存在 MySQL 中。

于 2013-02-28T16:14:28.677 回答