我使用分析函数计算每个客户在我的交易表中的滚动24小时支出金额。用于工作的函数,但是trx_datetime字段最近从日期更改为时间戳(9)。
select sum(th.amount)
over(partition by th.customer_id
order by th.trx_datetime
range between 1 preceding and 0 following) as rolling_trx_amt
from transactions th;
现在,当我运行查询时,我收到以下错误。
ORA-00902: invalid datatype
00902. 00000 - "invalid datatype"
我已经搜索了几个小时才能找到解决方案,并尝试在th.trx_datetime上进行无数次转换,但无法找到纠正错误的方法。如果您知道如何通过语句获取分析功能以使用时间戳,请告诉我。
答案 0 :(得分:0)
您收到该错误是因为您的范围使用整数(使用日期算法可以正常工作,因为它以天数计算),而时间戳算术使用间隔。
因此,您需要将范围转换为区间,您可以使用numtodsinterval
执行此操作,如下所示:
select sum(th.amount)
over(partition by th.customer_id
order by th.trx_datetime
range between numtodsinterval(1, 'DAY') preceding
and numtodsinterval(0, 'DAY') following) as rolling_trx_amt
from transactions th;
您也可以将其重写为:
select sum(th.amount)
over(partition by th.customer_id
order by th.trx_datetime
range between numtodsinterval(1, 'DAY') preceding
and current row) as rolling_trx_amt
from transactions th;
因为当你使用带范围的窗口子句时,“当前行”等同于“与当前行具有相同值的行”。