使用窗口函数时出现 Teradata 错误 3504(非聚合值必须是组的一部分)
Teradata error 3504 (non-aggregate values must be part of group) when using windowing function
所以我编写了一个使用 window 函数的查询,并且我在 Teradata 中不断收到错误 3504,尽管我确信我在 group by 子句中有正确的列(所有非聚合列).它与我正在使用的 windowing 函数有关,因为当我注释掉它时我没有得到错误,但我不知道如何解决它。
这是查询:
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
非常感谢任何帮助。谢谢!
据推测,您的意图是这样的:
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
总计 运行 似乎很奇怪,结果集中没有明确的日期列。
另外,我用原来的列名替换了别名。并非所有数据库都支持 window 函数中的别名,所以这只是我习惯的习惯。
所以我编写了一个使用 window 函数的查询,并且我在 Teradata 中不断收到错误 3504,尽管我确信我在 group by 子句中有正确的列(所有非聚合列).它与我正在使用的 windowing 函数有关,因为当我注释掉它时我没有得到错误,但我不知道如何解决它。
这是查询:
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
非常感谢任何帮助。谢谢!
据推测,您的意图是这样的:
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
总计 运行 似乎很奇怪,结果集中没有明确的日期列。
另外,我用原来的列名替换了别名。并非所有数据库都支持 window 函数中的别名,所以这只是我习惯的习惯。