WITH product_mgd AS (
SELECT
pppp.pens_product_id,
max(pppp.value_decimal)
FILTER (WHERE pppp.param_pl_id = 306) AS mgd_accum_from,
max(pppp.value_decimal)
FILTER (WHERE pppp.param_pl_id = 307) AS mgd_accum_to,
max(pppp.value_decimal)
FILTER (WHERE pppp.param_pl_id = 308) AS mgd_payment_from,
max(pppp.value_decimal)
FILTER (WHERE pppp.param_pl_id = 309) AS mgd_payment_to
FROM prod_line.pens_product_param_pl pppp
WHERE pppp.param_pl_id IN (306, 307, 308, 309)
GROUP BY pppp.pens_product_id
)
SELECT
c.id AS contract_id,
h.pens_product_id AS product_id,
pm.mgd_accum_from,
pm.mgd_accum_to,
cp.min_annual_income_period AS contract_mgd_accumulation,
pm.mgd_payment_from,
pm.mgd_payment_to,
cp.min_annual_savings_income AS contract_mgd_payment
FROM ourpension.contract c
JOIN ourpension.contract_product_history h
ON h.contract_id = c.id
AND CURRENT_TIMESTAMP BETWEEN
h.begin_date AND COALESCE(h.end_date, 'infinity')
JOIN product_mgd pm
ON pm.pens_product_id = h.pens_product_id
LEFT JOIN ourpension.contract_params cp
ON cp.contract_id = c.id
WHERE c.service_type IN ('NPO', 'PDS')
AND (
pm.mgd_accum_from IS DISTINCT FROM pm.mgd_accum_to
OR pm.mgd_payment_from IS DISTINCT FROM pm.mgd_payment_to
)
LIMIT 50;