我需要帮助来了解以下代码。在Teradata中使用时,我从未见过重置。 RESET WHEN在Teradata中做什么?我会部分了解分区和顺序。我也不确定为什么没有按PARTITION BY A.ACCT_DIM_NB,A.DAY_TIME_DIM_NB ORDER BY A.TXN_POSTING_SEQ对分区进行分区。另外,行之间的行之间是否仅使用整个分区窗口?
Removed
答案 0 :(得分:1)
我也不确定为什么未按PARTITION BY Y.ACCT_DIM_NB,Y.DAY_TIME_DIM_NB ORDER BY Y.DAY_TIME_DIM_NB,Y.TXN_POSTING_SEQ进行分区
不知道,但这会返回不同的结果(Y.DAY_TIME_DIM_NB
中不需要ORDER BY
,因为它已经被它分区了)
此外,行之间的行之间是否只使用整个分区窗口?
它与ROWS UNBOUNDED PRECEDING
完全相同,即,累积最大值的语法变体。分区是ROWS UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING
RESET在Teradata中执行什么操作?
RESET WHEN
是Teradata扩展,用于动态添加分区,它是两个(在您的情况下)或三个嵌套的OLAP函数的较短语法:
-- using RESET WHEN
MAX(A.RUN_BAL_AM)
OVER (PARTITION BY A.ACCT_DIM_NB
ORDER BY A.DAY_TIME_DIM_NB, A.TXN_POSTING_SEQ
RESET WHEN A.CS_TXN_CD NOT IN ('072','075','079','107','111','112','139','181','318')
ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS EOD_BAL_AM
-- Same result using Standard SQL
SELECT
Max(A.RUN_BAL_AM)
Over (PARTITION BY A.ACCT_DIM_NB, dynamic_partition
ORDER BY A.DAY_TIME_DIM_NB, A.TXN_POSTING_SEQ
ROWS BETWEEN Unbounded Preceding AND CURRENT ROW) AS EOD_BAL_AM
FROM
(
SELECT
-- this cumulative sum over 0/1 assigns a new value for each series of rows based on the CASE
Sum(CASE WHEN A.CS_TXN_CD NOT IN ('072','075','079','107','111','112','139','181','318') THEN 1 ELSE 0 end)
Over (PARTITION BY A.ACCT_DIM_NB, dynamic_partition
ORDER BY A.DAY_TIME_DIM_NB, A.TXN_POSTING_SEQ
ROWS Unbounded Preceding) AS dynamic_partition
FROM ...
) AS dt
答案 1 :(得分:0)
RESET在Teradata中执行什么操作?
当子句为true时,重置窗口累积。网上有很多这样的例子,但是在您的情况下,我想像(从未见过将它与max一起使用),它有效地定义了一个点,自此开始计算最大值,并且每次遇到不在给定列表中的txid导致最大值只能从该点开始计算
我也不确定为什么没有按PARTITION BY Y.ACCT_DIM_NB,Y.DAY_TIME_DIM_NB ORDER BY Y.DAY_TIME_DIM_NB,Y.TXN_POSTING_SEQ进行分区。
您为什么认为应该?分区和顺序非常不同。如果您有银行系统,则在准备银行对帐单时,可以按帐户进行分区,但可以按日期对交易进行排序。
此外,行之间的行之间是否只使用整个分区窗口?
它定义了累加器应查看以获取其答案的记录段。在您的情况下,最大值仅针对前几行进行计算。无限制的在前含义(自分区开始以来的所有行)。当前行就是这个意思。其他有效的示例可能是:
ROWS BETWEEN 200 preceding and current row
ROWS BETWEEN 10 preceding and 20 following
ROWS BETWEEN current row and unbounded following
因为您的窗口仅定义为前几行,所以随着行序的增加,最大值将停留在任何给定的最大值处,直到数据中出现新的最大值。例如:
Data,max
3,3
2,3
1,3
4,4
1,4
3,4
1,4
5,5
4,5
2,5
4,5
9,9
5,9
当您在当前行中找到比已知最大值更大的最大值时,便从上到下进行操作,它将成为新的最大值。仅在没有前几行限制的情况下,如果整个数据集都达到最大值,则每行报告的最大值为9