2013-02-28 123 views
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 
... 
+1

不,我不認爲這是...除非你想生成的平均值在接收程序後,你從MySQL獲得了數據儘管子查詢至少會刪除'連接'。 (但不是更漂亮) – 2013-02-28 16:09:36

+0

「平均」是什麼意思? 「超過一段時間」是什麼意思?目前,您正在採用屬於相應日期範圍內SalesTable(對於給定商店)中所有記錄的平均值'DailySales'。然而,這不是這段時期的「平均每日銷售額」:考慮一下商店在特定時間段內有多個(或不包含)記錄會發生什麼情況:也許您希望將所有銷售額的總和除以天數?更明確地定義問題,然後我們可以幫助建議可能的答案。 – eggyal 2013-02-28 16:11:24

+0

@RefugnicEternium,謝謝你的回覆。數據是歷史數據,然後進入R.我可以很容易地在R中計算它,但在sql中執行速度要快得多。看起來我堅持使用代碼。謝謝。 – 2013-02-28 16:22:54

回答

1

,如果你想拉實時我不認爲你可以以任何其他方式做到這一點數據。但是,如果您可以承受顯示過時的數據,則可以預先計算每個項目的平均值(如每天一次或兩次)。

你可能想看看Event Scheduler,它允許你保存MySQL中的所有內容。

+0

感謝您的回覆。我會看看調度器。乾杯 – 2013-02-28 16:21:51

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 
+0

我想補充一點,如果這很重要,你也可以按商店分組。 – 2013-02-28 16:50:40