2012-12-11 32 views
0

我有一張表,其中包含多個可追溯至2年的產品的每小時條目。我想編寫一個查詢這將是這個樣子:在單個查詢中結合不同時間段的每日平均值

PRODUCT, TODAY'S AVERAGE, LAST MONTHS DAILY AVERAGE, YEAR TO DATE DAILY AVERAGE 

我可以通過編寫單獨的查詢每個平均值,然後在PRODUCT NAME加入他們實現這一目標。但是,我希望能夠通過編寫一個單一的查詢來做到這一點。

他們是我可以應用的標準算法/方法嗎?

+2

你可以給我們提出你的疑問plz – Marc

+1

你可以給你的表的定義嗎? – PearsonArtPhoto

+2

如果你已經有一些工作,那麼你爲什麼尋找替代品?您想要解決的當前解決方案有哪些問題? – Pondlife

回答

0

這是一個聚合查詢。但是,它會爲您想要的每個時間段獲取變量,然後每天進行總計以進行最終計算。

select product, 
     sum(DailySum*IsToday) as Today, 
     sum(1.0*DailySum*IslastMonth)/sum(IslastMonth) 
     sum(1.0*DailySum*IsYTD)/sum(IsYTD) 
from (select product, cast(dt as date) as thedate, sum(val) as DailySum 
      (case when cast(dt as date) = cast(getdate() as date) then 1 else 0 end) as IsToday, 
      (case when year(dt) = year(dateadd(month, -1, getdate()) and month(dt) = month(dateadd(month, -1, getdate()) 
        then 1 else 0 
       end) as IslastMonth, 
      (case when year(dt) = year(getdate()) tehn 1 else 0 
       end) as IsYTD 
     from t 
     group by product, cast(dt as date) 
    ) t 
    ) t