2015-11-20 56 views
0

所以,我有這個查詢,我需要「價值」的平均值。我需要這個連接,因爲表中有基於批量加載時間的版本 - 所以同一年/月可以有多個版本,但我只需要最新版本。我在這個OVER例子上需要一個子查詢嗎?

select *, 
    avg(value) over (
     order by YEAR, MONTH 
     ROWS 11 preceding) as averageValue 
from 
(
    SELECT 
     c.YEAR, 
     c.MONTH, 
     PRODUCT, 
     value 
    FROM 
     db.table c 
    join (
     select year, month, max(version) as version 
     from db.table 
     group by year, month 
     ) v 
    on c.year = v.year 
    and c.month = v.month 
    and c.version = v.version 
) a 
order by year desc, month desc 

我真的需要把我的主查詢作爲子查詢,獲取字段的AVG()超過()?如果我嘗試做直上主查詢,所有我得到的全部價值,而不是過去的十二個月所需的平均...這裏

+2

上傳失敗的查詢過。 – Paolo

+0

hm ......我認爲我遇到的問題是OVER子句中的順序......我只重試了幾乎相同的查詢,但是使用DESC順序重複了主查詢中的平均值,現在它似乎可以工作... –

回答

0

問題是我沒有使用DESC我應該在OVER子句上 - 即使查詢已訂購年/月DESC,OVER子句也沒有。現在

,此查詢,工作,它應該:

SELECT 
     c.YEAR, 
     c.MONTH, 
     PRODUCT, 
     value, 
     avg(value) over (
      order by YEAR desc, MONTH desc 
      ROWS 11 preceding 
     ) as averageValue 
    FROM 
     db.table c 
    join (
     select year, month, max(version) as version 
     from db.table 
     group by year, month 
     ) v 
    on c.year = v.year 
    and c.month = v.month 
    and c.version = v.version 
    order by year desc, month desc 
相關問題