【发布时间】:2021-05-04 05:13:26
【问题描述】:
我正在处理每月帐户表,该表存储每月月底帐户状态的快照。它是按月划分的。
例子:
MNTH_END_DT ACCT_ID STATUS_CD
----------- ------- ---------
1/31/2021 1234 I
2/28/2021 1234 I
3/31/2021 1234 A
我正在尝试计算任何给定月份的 STATUS_CD 更改为“A”的所有帐户,而上个月仍为“I”。我这样做了大约三年的数据。
我尝试进行自加入,但没有得到正确的结果。这是我的代码示例
SELECT
a1.mnth_end_dt AS Mth
,a2.mnth_end_dt AS Prior_Mth
,SUM(CASE WHEN a1.status_cd = 'A' AND a2.status_cd = 'I' THEN 1 ELSE 0 END) AS Stat_Chg
FROM acct_tbl AS a1
INNER JOIN acct_tbl as A2
ON a1.acct_id = a2.acct_id
AND a1.mnth_end_dt = LAST_DAY(ADD_MONTHS(a2.mnth_end_dt,-1))
AND a2.mnth_end_dt BETWEEN '2020-12-01' AND '2021-02-28'
WHERE a1.mnth_end_dt BETWEEN '2021-01-01' AND '2021-03-31'
GROUP BY 1,2
这种方法似乎并没有真正起作用,因为这些是我得到的结果:
Mth Prior_Mth Stat_Chg
--------- --------- ---------
1/31/2021 2/28/2021 500
忽略 Stat_Chg 值,这些只是说明性的。但在其他两列中,我希望看到 Prior_Mth 列比 Mth 列早一个月。例如。在上面的示例中,我希望看到 Prior_Mth 是 2020 年 12 月 31 日,而不是 2021 年 2 月 28 日。而且它也只返回一行结果,而我原本希望返回 3 行。
有什么更好的方法来做这件事的建议吗?
【问题讨论】: