2013-02-28 118 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