我有以下字段:
implement_dt approval_dt phase
3/31/2018 12/31/2017 1
3/31/2019 12/31/2017 2
3/31/2020 12/31/2017 3
我正尝试根据approval_dt
的间隔重新计算implement_dt
到:(而且我不能仅仅将相位添加到approval_dt
,因为某些间隔更大超过一年)
implement_dt approval_dt phase
3/31/2018 12/31/2017 1
3/31/2019 12/31/2018 2
3/31/2020 12/31/2019 3
我基本上已经使用以下代码做到了这一点:
select *
, case when phase = 1 then approval_dt
when phase > 1 then approval_dt + balance
else null
end as new_date
from (
select *
, sum(changes) over (order by phase) as balance
from (
select *
, implement_dt - lag(implement_dt) over (order by phase) as changes
from chk1
) x
) y
;
此功能有效,除非a年的approval_dt
为12/31
。使用上面的代码,我的结果是:
implement_dt approval_dt phase
3/31/2018 12/31/2017 1
3/31/2019 12/31/2018 2
3/31/2020 1/1/2020 3
3/31/2019
和3/31/2020
之间的天数差为366天。我需要1/1/2020
是12/31/2019
。
我已经尝试过使用implement_dt
之间的年份差异而不是天数,并将其乘以365以获得“纯净年份”的变体,但是在第3行中却不断出现错误:
select *
, case when phase = 1 then approval_dt
when phase > 1 then approval_dt + balance
else null
end as new_date
from (
select *
, (sum(changes) over (order by phase)::bigint)*365 as balance
from (
select *
, extract(year from implement_dt) - lag(extract(year from implement_dt)) over (order by phase) as changes
from chk1
) x
) y
;
ERROR: operator does not exist: date + bigint
LINE 3: when phase > 1 then approval_dt + balance
^
HINT: No operator matches the given name and argument type(s). You may need to add explicit type casts.
我在Greenplum中将pgAdmin与PostgreSQL一起使用。有什么建议吗?