如何编写DB2存储过程来计算DPM逻辑。
例如,2014年1月1日至2014年9月30日期间,将显示9条记录(每月一条记录)。对于每条记录,DPM(每月的天数)需要在运行时计算,动态并在公式中更新:
select (((dpm*24) / 2400) * 123) / dpm
from xxx-table
where date between '2014-09-01' and '2014-01-01'
如何确保在上述公式中更新正确的DPM
预期输出
Jan - (((31*24) / 2400) * 123) / 31
Feb -(((28*24) / 2400) * 123) / 28
March - (((31*24) / 2400) * 123) / 31
April - (((30*24) / 2400) * 123) / 30
May - (((31*24) / 2400) * 123) / 31
June - (((30*24) / 2400) * 123) / 30
July - (((31*24) / 2400) * 123) / 31
August - (((31*24) / 2400) * 123) / 31
September - (((30*24) / 2400) * 123) / 30
答案 0 :(得分:0)
正如@mustaccio所说,你的公式总是简化为1.23,通过将第一个dpm乘以第一个分数“out”:
(dpm *(24/2400)* 123)/ dpm
然后,dpm相互取消,只剩下
(24/2400)* 123
这是常数1.23
但是,如果您确实需要每月计算一天,则可以使用递归查询来构建月份列表,然后使用LAST_DAY
结合DAY
标量函数。我假设您正在使用DB2 for Linux / Unix / Windows,我认为{9}中添加了LAST_DAY
WITH DATES (DTE, LVL) AS (
SELECT CAST(@beginDate AS DATE), 0
FROM SYSIBM.SYSDUMMY1
UNION ALL
SELECT DTE + 1 MONTHS, LVL +1
FROM SYSIBM.SYSDUMMY1, DATES
WHERE DTE + 1 MONTHS <= @endDate
)
SELECT DAY(LAST_DAY(DTE))
FROM DATES