Загрузка данных


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;