【问题标题】:How to calculate the Difference between SUM values如何计算 SUM 值之间的差异
【发布时间】:2015-04-29 02:10:05
【问题描述】:

我正在提取不同日期的总账户余额,需要计算这些总账户余额之间的差额,但需要解决方案。

SQL:

SELECT SNAPSHOT_DATE,
SUM(ACCOUNT_BALANCE_AMOUNT) SAVINGS_BALANCES
FROM pIDWUserVW.PRODUCT_SAVINGS_VW
WHERE SNAPSHOT_DATE IN ('2015-01-02',  '2015-01-30', '2015-02-02', '2015-02-27', '2015-03-31')
GROUP BY SNAPSHOT_DATE
ORDER BY SNAPSHOT_DATE ASC;

结果:

SNAPSHOT_DATE   SAVINGS_BALANCES
1/2/2015    10,407,069,092.55
1/30/2015   10,581,034,604.38
2/2/2015    10,525,024,786.77
2/27/2015   11,105,597,533.96
3/31/2015   11,371,511,747.20

这是我想要的(“差异”列),但我找不到执行此操作的正确函数:

SNAPSHOT_DATE   SAVINGS_BALANCES    DIFFERENCE
1/2/2015    10,407,069,092.55   
1/30/2015   10,581,034,604.38   173,965,511.83 
2/2/2015    10,525,024,786.77   (56,009,817.61)
2/27/2015   11,105,597,533.96   580,572,747.19 
3/31/2015   11,371,511,747.20   265,914,213.24 

我正在使用 Teradata SQL 助手,当我尝试 MDIFF 之类的函数时,出现聚合只允许使用窗口函数之类的错误,但我可能做错了。

【问题讨论】:

  • 寻找一种方法对行号或任何 teradata 允许的内容进行自联接。

标签: sql teradata difference


【解决方案1】:

Windowed Aggregate Function 是在 聚合之后计算的,您需要一个 Teradata 中未实现但可以轻松模拟的 LEAD 函数:

SELECT SNAPSHOT_DATE,
   SUM(ACCOUNT_BALANCE_AMOUNT) SAVINGS_BALANCES,
   SUM(ACCOUNT_BALANCE_AMOUNT)        -- current value
   - MIN(SUM(ACCOUNT_BALANCE_AMOUNT)) -- previous row's value
     OVER (ORDER BY SNAPSHOT_DATE
           ROWS BETWEEN 1 PRECEDING AND 1 PRECEDING) AS DIFFERENCE
FROM pIDWUserVW.PRODUCT_SAVINGS_VW
WHERE SNAPSHOT_DATE IN ('2015-01-02',  '2015-01-30', '2015-02-02', '2015-02-27', '2015-03-31')
GROUP BY SNAPSHOT_DATE
ORDER BY SNAPSHOT_DATE ASC;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-09
    • 1970-01-01
    • 2014-07-21
    • 1970-01-01
    相关资源
    最近更新 更多