计算不同时间间隔的平均值

时间:2013-02-28 16:06:30

标签: mysql join average

在mysql中,我计算不同时间间隔(3天,7天,30天,60天等)的相同指标的平均值,我需要每个{{ 1}}。

目前,我每隔一段时间使用一次加入。鉴于我必须为许多不同的商店计算这个,并且在几个不同的时间间隔内,是否有更清洁和/或更有效的方法来实现这一点?

以下是我目前使用的代码。

提前感谢您的帮助

id

结果如下:

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

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

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

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