0

发布此问题可能毫无意义,因为我无法显示导致问题的实际代码,并且由于不知道问题的根源,因此无法使用假数据重新创建它,但想问一下是否有人看到过类似的东西.

我有一个查询,它有一个 SUM windows 函数,每次运行时都会返回不同的值,尽管代码或基础数据没有变化。从字面上看,相同的语句相隔两秒运行将返回一个看似随机的选择,从 4 到 7。

我无法打印实际代码,但产生不同结果的行如下,其中列名已更改:-

SUM(UNITS) OVER (PARTITION BY ACCOUNT_KEY, TRANSACTION_DATE 
    ORDER BY ACCOUNT_KEY,TRANSACTION_DATE)  NUMBER_OF_UNITS      

如果有人可以就如何解决这个问题提供任何建议,或者如果您遇到类似问题,请告诉我。我意识到,如果没有完整的代码,就很难确定,但是有人可能已经看到了类似的问题,并且可能会提供一些指导。

4

1 回答 1

3

你的ORDER BY钥匙和你的PARTITION BY钥匙一样。因此,没有排序——窗口框架中的所有内容都具有相同的排序键值。

您正在对不稳定的排序进行累积和。因此,这些行可以——并且是——以任意顺序排列。

大概,您想要每个帐户的累积总和UNITS,按日期排序:

SUM(UNITS) OVER (PARTITION BY ACCOUNT_KEY ORDER BY TRANSACTION_DATE) as NUMBER_OF_UNITS

假设它TRANSACTION_DATE是唯一的,这将是稳定的。请注意,默认情况下,一个帐户的相同交易日期会一起出现,因为默认窗口条款是RANGE

SUM(UNITS) OVER (PARTITION BY ACCOUNT_KEY
                 ORDER BY TRANSACTION_DATE
                 RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW
                ) as NUMBER_OF_UNITS
于 2021-03-30T10:38:57.587 回答