如何解决postgresql 中的动态查询 - 滚动发薪日率
我在 postgresql 中运行查询以获取一组客户在截止日期 t+1 (fe02-28-2015) 中的发薪日类别 - 上个月 t (fe01-31-2015) .结果是令人满意的,但是,如果我想要从 2015 年 1 月到 2020 年 1 月的滚动率,我必须逐月运行,更改月份 t 和月份 t +1。 他们知道以某种方式通过执行一次查询(可能是循环)来获得结果。 提前致谢。
--creating the categories for month t plus 1 (Feb15)
DROP TABLE IF EXISTS rolls_rate_t_plus_1;
CREATE TEMP TABLE rolls_rate_t_plus_1 AS (SELECT
a.co_contra -- Primary key,a.pe_produc -- Month of production,(CASE
WHEN a.co_diamorcro <= 0 THEN '0 dpd'
WHEN a.co_diamorcro > 0 AND a.co_diamorcro <= 8 THEN '1-8 dpd'
WHEN a.co_diamorcro > 8 AND a.co_diamorcro <= 30 THEN '9-30 dpd'
WHEN a.co_diamorcro > 30 AND a.co_diamorcro <= 60 THEN '31-60 dpd'
WHEN a.co_diamorcro > 60 AND a.co_diamorcro <= 120 THEN '61-120 dpd'
WHEN a.co_diamorcro > 120 then '>120 dpd'
ELSE 'Refinanced and canceled' END ) AS rolls_rate_t_plus_1 -- Rolls rate (paydays) category in month t plus 1 (February)
FROM risk.portfolio_wfcore a
WHERE
pe_produc= (date_trunc('month',a.pe_produc + interval '1 month' - interval '1 day')::date -1) -- Last day of the month
AND to_char(pe_produc,'yyyymm')='201502' -- February month (t+1)
)
;
--- Consolidating data from month t with month t plus one from the temporary table created prevIoUsly
SELECT
a.product -- Company products,to_char(a.pe_produc,'yyyymm') AS codmonth --Month of production,(CASE
WHEN a.co_diamorcro <= 0 THEN '0 dpd'
WHEN a.co_diamorcro > 0 AND a.co_diamorcro <= 8 THEN '1-8 dpd'
WHEN a.co_diamorcro > 8 AND a.co_diamorcro <= 30 THEN '9-30 dpd'
WHEN a.co_diamorcro > 30 AND a.co_diamorcro <= 60 THEN '31-60 dpd'
WHEN a.co_diamorcro > 60 AND a.co_diamorcro <= 120 THEN '61-120 dpd'
WHEN a.co_diamorcro > 120 then '>120 dpd'
ELSE 'Refinanced and canceled' END ) AS rolls_rate_t --Rolls rate(paydays) category in month t (January),(CASE
WHEN b.rolls_rate_axes_t_mas_1 IS null THEN 'Refinanced and canceled'
ELSE b.rolls_rate_axes_t_mas_1 END) AS rolls_rate_t_plus_1 --Rolls rate category in month t plus 1 (February),COUNT(a.co_contra) AS nro_credit -- nro of credits of month t (January),SUM(a.im_salact) AS amount_credit -- amount of credits of month t (January)
FROM risk.portfolio_wfcore a
LEFT JOIN
rolls_rate_t_plus_1 b
ON a.co_contra = b.co_contra
WHERE
a.pe_produc= (date_trunc('month',a.pe_produc + interval '1 month' - interval '1 day')::date -1) -- Last day of the month
AND to_char(a.pe_produc,'yyyymm')='201501' -- January month (t)
GROUP BY 1,2,3,4,5,6
ORDER BY 1,2
结果:
产品 | codmonth | rolls_rate_axes_t | rolls_rate_t_plus_1 | nro_credit_t | amount_credit_t |
---|---|---|---|---|---|
微 | 201501 | 31-60 dpd | 61-90 dpd | 2 | 247.59 |
微 | 201501 | 61-90 dpd | 再融资和取消 | 3 | 2388.56 |
微 | 201501 | 61-90 dpd | 31-60 dpd | 26 | 54251.75 |
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。