Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/75.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分析服务返回错误/意外的结果_Sql_Oracle_Date_Analytics - Fatal编程技术网

Sql Oracle分析服务返回错误/意外的结果

Sql Oracle分析服务返回错误/意外的结果,sql,oracle,date,analytics,Sql,Oracle,Date,Analytics,编写SQL查询,该查询应返回前91天窗口的平均费用。我将日期截短到一周的第一天,并期望91天的平均值为该日期之前的91天 但是,在验证时,91天的平均值似乎包括了我截断的当前一周 查询: SELECT week AS WEEK, to_char(week,'ww-yyyy') AS Week_num --Sum of the charges for the previous 91 days / 91 will give you avg charges per day fo

编写SQL查询,该查询应返回前91天窗口的平均费用。我将日期截短到一周的第一天,并期望91天的平均值为该日期之前的91天

但是,在验证时,91天的平均值似乎包括了我截断的当前一周

查询:

SELECT
    week AS WEEK,
    to_char(week,'ww-yyyy') AS Week_num
    --Sum of the charges for the previous 91 days / 91 will give you avg charges per day for the last 91 days
    --Need to count days regardless of if there are any charges on that day
    ,(SUM(CHARGES) OVER (ORDER BY WEEK RANGE INTERVAL '91' DAY PRECEDING))/91 MV_91_DAY_AVG
FROM 
( 

    SELECT
         --Truncate date down to first of week. Goal is to make 91 day preceding being at this date.
         TRUNC(TRANS.ORIG_POST_DATE,'WW') AS WEEK
         ,SUM(TRANS.AMOUNT) AS CHARGES
    FROM TRANS
    WHERE
        TRANS.DETAIL = "Charge"
    GROUP BY TRUNC(TRANS.ORIG_POST_DATE,'WW')
)
ORDER BY WEEK
电流输出:
在除法之前先减去当前值

,(SUM(CHARGES) OVER (ORDER BY WEEK RANGE INTERVAL '91' DAY PRECEDING) - CHARGES)/91

我想你希望你的窗口条款是:

(ORDER BY WEEK RANGE BETWEEN INTERVAL '91' DAY PRECEDING AND INTERVAL '1' DAY PRECEDING)
以排除本周的费用


您可能还想将“91”改为“92”,以便在开始时增加一周。

我尝试了一下,但没有掷骰子。它完全改变了数字。现在,这些数字是正确的,只是被一周的时间抵消了。不过谢谢你的建议……;)这真是太棒了。所以我必须承认,我仍然不明白为什么我的查询占据了本周,是什么让你排除了它。如果你有时间解释一下,那就太好了。或者请随意给我指一些我应该回顾的文档。我只是不知道该去哪里找。不管怎样。。。非常感谢@Cimplicity:您刚刚给出了要包含的范围的起点。默认终点是当前行,且包含该行。通过显式设置
INTERVAL
1`DAY previous`的端点,当前行将被排除。如果您有类似于我上面的问题,我强烈建议您查看此Oracle分析函数概述,可在youtube上的Sheepsquezers频道或。