在这个OVER示例中,我是否需要子查询?

时间:2015-11-20 13:31:56

标签: sql-server tsql

所以,我已经得到了这个查询,我需要平均值"值"。我需要加入,因为该表具有基于批量加载时间的版本 - 因此同一年/月可以有多个版本,但我只想要最新版本。

ImageView

我是否真的需要将我的主查询作为子查询,以获得该字段的avg()over()?如果我尝试直接在主要查询上进行,我得到的只是全部值,而不是过去12个月所需的平均值...

1 个答案:

答案 0 :(得分:0)

这里的问题是我没有在OVER子句中使用DESC - 所以即使查询订购了年/月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