1

mysql では、異なる間隔 (3 日、7 日、30 日、60 日など) で同じメトリックの平均を計算しています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

結果は次のとおりです。

  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

リアルタイムのデータを取得したい場合、他の方法ではこれを行うことはできないと思います。ただし、少し古いデータを表示する余裕がある場合は、各アイテムのこれらの平均 (1 日に 1 回または 2 回など) を事前に計算できます。

MySQL 内にすべてを保持できるEvent Schedulerを調べることをお勧めします。

于 2013-02-28T16:14:28.677 に答える