Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql Oracle 11g分析功能和_Sql_Oracle11g_Sum_Timestamp_Oracle Analytics - Fatal编程技术网

Sql Oracle 11g分析功能和

Sql Oracle 11g分析功能和,sql,oracle11g,sum,timestamp,oracle-analytics,Sql,Oracle11g,Sum,Timestamp,Oracle Analytics,我正在使用一个分析函数来计算我的交易表中每个客户的24小时滚动消费金额。该函数用于工作,但是trx_datetime字段最近从日期更改为时间戳(9) 现在,当我运行查询时,我得到以下错误 ORA-00902: invalid datatype 00902. 00000 - "invalid datatype" 我已经搜索了几个小时来寻找解决方案,并尝试了无数次在th.trx_datetime上的转换,但没有找到纠正错误的方法。如果您知道如何让分析函数order by语句使用时间戳,请告诉我。

我正在使用一个分析函数来计算我的交易表中每个客户的24小时滚动消费金额。该函数用于工作,但是trx_datetime字段最近从日期更改为时间戳(9)

现在,当我运行查询时,我得到以下错误

ORA-00902: invalid datatype
00902. 00000 -  "invalid datatype"

我已经搜索了几个小时来寻找解决方案,并尝试了无数次在th.trx_datetime上的转换,但没有找到纠正错误的方法。如果您知道如何让分析函数order by语句使用时间戳,请告诉我。

您之所以会出现此错误,是因为您的范围使用整数(这适用于日期算术,因为它是以天数计算的),而时间戳算术使用间隔

因此,您需要将范围转换为间隔,您可以使用
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;

因为当您使用带范围的windowing子句时,“当前行”等同于“与当前行具有相同值的行”。

之所以会出现此错误,是因为您的范围使用整数(适用于日期算术,因为它是以天数计算的),而时间戳算术使用间隔

因此,您需要将范围转换为间隔,您可以使用
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;
因为当使用范围为的windowing子句时,“当前行”等同于“与当前行具有相同值的行”