所以,我实际上找到了自己问题的答案。我走了几步。
首先,我决定通过添加一个列来反映费用、付款、调整和坏账的总和来进行一些整理。这在以后的运行总数中会派上用场。感觉有点“骇人听闻”,但我只是在学习,所以随便吧。
sum(CHARGE_AMOUNT)+sum(VOID_AMOUNT)+sum(PAYMENT_AMOUNT)+
sum(ADJUSTMENT_AMOUNT)+sum(ACTIVE_AR_IN_OUT) as sum_of_values
其次,我创建了一个运行总计。这最初是一个挑战,因为我无法引用月份和年份,除非我给它一个别名为 month_year 并放在 FROM 子句中的子查询中。
FROM
(SELECT
CASE WHEN POST_DATE BETWEEN '2019-06-01' AND '2019-06-30' THEN 'June - 2019'
WHEN POST_DATE BETWEEN '2019-07-01' AND '2019-07-31' THEN 'July - 2019'
WHEN POST_DATE BETWEEN '2019-08-01' AND '2019-08-31' THEN 'August - 2019'
ELSE 'Other' END as month_year,
(SELECT sum(OUTSTANDING_AMT)
FROM ARPB_TRANSACTIONS
WHERE POST_DATE BETWEEN '2019-05-01' AND '2019-05-31') as beginning_balance,
sum(CHARGE_AMOUNT)+sum(VOID_AMOUNT) as charge_tot,
sum(PAYMENT_AMOUNT) as payment_tot,
sum(ADJUSTMENT_AMOUNT) as adjustment_tot,
sum(ACTIVE_AR_IN_OUT) as bad_debt_tot,
sum(CHARGE_AMOUNT)+sum(VOID_AMOUNT)+sum(PAYMENT_AMOUNT)+
sum(ADJUSTMENT_AMOUNT)+sum(ACTIVE_AR_IN_OUT) as sum_of_values
FROM F_ARPB_CUBE_ETR_DETAIL
WHERE POST_DATE BETWEEN '2019-06-01' AND '2019-08-31'
GROUP BY CASE
WHEN POST_DATE BETWEEN '2019-06-01' AND '2019-06-30' THEN 'June - 2019'
WHEN POST_DATE BETWEEN '2019-07-01' AND '2019-07-31' THEN 'July - 2019'
WHEN POST_DATE BETWEEN '2019-08-01' AND '2019-08-31' THEN 'August - 2019'
ELSE 'Other' END ) as x
第三,这让我可以在我的运行总表达式中专门引用“month_year”:
SELECT month_year, beginning_balance,charge_tot, payment_tot, adjustment_tot, bad_debt_tot, sum_of_values, SUM(sum_of_values) OVER (ORDER BY month_year desc) as running_total
最后,我实际上需要从前几个月的运行总数中减去运行(即“开始余额”减去“总和值”),而不是运行(总和)总数,所以我只是修改了上面的表达式,如:
SELECT month_year, beginning_balance,charge_tot, payment_tot, adjustment_tot, bad_debt_tot, sum_of_values, beginning_balance-SUM(sum_of_values) OVER (ORDER BY month_year desc) as running_total
这是最后的查询:
SELECT month_year, beginning_balance,charge_tot, payment_tot, adjustment_tot, bad_debt_tot, sum_of_values, beginning_balance-SUM(sum_of_values) OVER (ORDER BY month_year desc) as running_total
FROM
(SELECT
CASE WHEN POST_DATE BETWEEN '2019-06-01' AND '2019-06-30' THEN 'June - 2019'
WHEN POST_DATE BETWEEN '2019-07-01' AND '2019-07-31' THEN 'July - 2019'
WHEN POST_DATE BETWEEN '2019-08-01' AND '2019-08-31' THEN 'August - 2019'
ELSE 'Other' END as month_year,
(SELECT sum(OUTSTANDING_AMT)
FROM ARPB_TRANSACTIONS
WHERE POST_DATE BETWEEN '2019-05-01' AND '2019-05-31') as beginning_balance,
sum(CHARGE_AMOUNT)+sum(VOID_AMOUNT) as charge_tot,
sum(PAYMENT_AMOUNT) as payment_tot,
sum(ADJUSTMENT_AMOUNT) as adjustment_tot,
sum(ACTIVE_AR_IN_OUT) as bad_debt_tot,
sum(CHARGE_AMOUNT)+sum(VOID_AMOUNT)+sum(PAYMENT_AMOUNT)+
sum(ADJUSTMENT_AMOUNT)+sum(ACTIVE_AR_IN_OUT) as sum_of_values
FROM F_ARPB_CUBE_ETR_DETAIL
WHERE POST_DATE BETWEEN '2019-06-01' AND '2019-08-31'
GROUP BY CASE
WHEN POST_DATE BETWEEN '2019-06-01' AND '2019-06-30' THEN 'June - 2019'
WHEN POST_DATE BETWEEN '2019-07-01' AND '2019-07-31' THEN 'July - 2019'
WHEN POST_DATE BETWEEN '2019-08-01' AND '2019-08-31' THEN 'August - 2019'
ELSE 'Other' END ) as x
ORDER BY month_year desc
Final Output