使用窗口函数时,Teradata错误3504(非聚合值必须是组的一部分)

时间:2018-06-06 15:35:03

标签: sql teradata

所以我写了一个使用窗口函数的查询,并且我在Teradata中不断收到错误3504,尽管我确定我在group by子句中有正确的列(所有非聚合列)。它与我正在使用的窗口函数有关,因为当我发表评论时我没有得到错误,但我不知道如何解决它。

这是查询:

select
   n.acct_id as bd_acct_id
  ,n.tran_nr as tran_order           
  ,t.trade_dt - n.tran_dt as days_until_trade
  ,n.n_total
  ,sum(t.trade_ct) as trades_ct
  ,sum(t.trade_gross_am) as tot_trades
  ,sum(t.trade_gross_am) over (partition by bd_acct_id, tran_order order by tran_order) as running_total

  from nnae n

    left join trades t
      on n.acct_id = t.acct_id

  having days_until_trade > 0

group by 1,2,3,4
order by 1,2,3

非常感谢任何帮助。谢谢!

1 个答案:

答案 0 :(得分:1)

据推测,你打算这样:

sum(sum(t.trade_gross_am)) over (partition by n.acct_id, n.tran_nr
                                 order by min(n.tran_dt)
                                 rows between unbounded preceding and current row
                                ) as running_total

有一个运行总计似乎很奇怪,结果集中没有明确的日期列。

另外,我用原始列名替换了别名。并非所有数据库都支持窗口函数中的别名,因此这只是我习惯的习惯。