【问题标题】:Teradata error 3504 (non-aggregate values must be part of group) when using windowing function使用窗口函数时出现 Teradata 错误 3504(非聚合值必须是组的一部分)
【发布时间】:2018-06-07 10:19:10
【问题描述】:

所以我编写了一个使用窗口函数的查询,并且在 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

不胜感激。谢谢!

【问题讨论】:

  • 您的 select 子句中的最后一个 SUM 是罪魁祸首,但我不知道如何解决它,部分原因是我不知道它应该做什么。

标签: sql teradata


【解决方案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

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

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

【讨论】:

  • 谢谢,这可以解决问题,但结果不是我所希望的。我会问一个单独的问题。
  • @starfly:必须添加ROWS UNBOUNDED PRECEDING,Teradata 不支持标准SQL 的默认RANGE UNBOUNDED PRECEDING,而是返回Group Sum
  • @dnoeth 谢谢!!这给出了我正在寻找的确切结果:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-15
  • 2015-10-05
  • 2020-05-14
  • 2013-06-27
  • 2021-12-17
  • 2018-07-15
相关资源
最近更新 更多