Sql 如何在Teradata中按秩(而不是行)计算滚动平均值?

Sql 如何在Teradata中按秩(而不是行)计算滚动平均值?,sql,average,teradata,ansi-sql,rolling-average,Sql,Average,Teradata,Ansi Sql,Rolling Average,我在Teradata中有下表: ranked | data_val -------- ---------- 1 | 100 2 | 30 2 | 20 2 | 70 我想要下表,其中avg_val是按排名值升序排列的数据值的滚动平均值: 我尝试使用: SELECT ranked , AVERAGE(data)val) OVER ( PARTITION BY NULL ORDER BY ranked

我在Teradata中有下表:

 ranked | data_val 
-------- ----------
 1      | 100
 2      |  30
 2      |  20
 2      |  70
我想要下表,其中avg_val是按排名值升序排列的数据值的滚动平均值:

我尝试使用:

SELECT 
    ranked
  , AVERAGE(data)val) OVER (
      PARTITION BY NULL 
      ORDER BY ranked ASC
      ROWS UNBOUNDED PRECEDING
      ) AS avg_val
  FROM tbl
;
但我明白了:

 ranked | avg_val 
------ ---------
 1      | 100
 2      |  65
 2      |  50
 2      |  55
这不是我想要的


如何返回所需的输出?

如何使用窗口函数进行聚合

select ranked,
       (sum(sum(data_val)) over (order by ranked rows between unbounded preceding and current row) /
        sum(count(*)) over (order by ranked rows between unbounded preceding and current row)
       )
from t
group by ranked;

需要一个无边界的行,但它可以工作。从tbl group by ranked中选择ranked,sumsumdata_val over order by ranked ROWS UNBOUNDED Previous/sumcount*over order by ranked ROWS UNBOUNDED Previous from tbl group by ranked@萨姆。啊。Teradata还没有解决这个问题。我加了开窗条款,不用担心。我还没有足够的堆栈溢出声誉来显示upvote,但是请放心,您已经被upvote了。不默认为RANGE UNBONDED PREVICE是有历史原因的,并且RANGE在Teradata中不受支持,但无论如何建议使用explixit ROWS UNBONDED PREVICE,因为对于非唯一订单,可能会有更好的性能和潜在的意外结果by@dnoeth . . . 哦默认值应为range,但Teradata不支持该值。因此,它需要windowing子句来表示rows构造。这实际上是有道理的。
select ranked,
       (sum(sum(data_val)) over (order by ranked rows between unbounded preceding and current row) /
        sum(count(*)) over (order by ranked rows between unbounded preceding and current row)
       )
from t
group by ranked;