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


WITH base AS (
    SELECT
        x.id,
        x."year",
        x."type",
        x.sum_income,
        x."date",
        x.sum_tax_deduction,
        x.max_tax_deduction,
        x."number",
        x.canceled,
        x.accepted,
        x."version",

        row_number() over (
            partition by x."year"
            order by x."version" desc, x.id desc
        ) as dt

    FROM ourpension.year_tax_deduction x
    LEFT JOIN ourpension.application_termination_contract atc
        ON x.application_termination_contract_id = atc.id
    LEFT JOIN ourpension.application_personal_data_individual apdi
        ON apdi.id = atc.application_personal_data_individual_id
    LEFT JOIN ourpension.application_termination_contract_data atcd
        ON atcd.application_termination_contract_id = atc.id
    LEFT JOIN ourpension.sharer sh
        ON sh.id = atcd.sharer_id
    LEFT JOIN ourpension.contract contract
        ON contract.id = sh.contract_id

    WHERE x.application_termination_contract_id = :appId
      AND x."year" >= cast(to_char(contract.date, 'YYYY') as int)
      AND x."type" != 'NONE'
)

SELECT
    CASE
        WHEN q.canceled IS NULL THEN 'Актуальная'
        ELSE 'Неактуальная'
    END AS actual,

    q."year" AS year,
    q.dt AS dt,

    CASE q."type"
        WHEN 'NONE' THEN 'Нет справки'
        WHEN 'NOT_RECEIVED' THEN 'Вычет не получен'
        WHEN 'RECEIVED' THEN 'Вычет получен'
    END AS type,

    q.sum_income AS sum_income,
    to_char(q."date", 'DD.MM.YYYY') AS date,
    q.sum_tax_deduction AS sum_tax_deduction,
    q.max_tax_deduction AS max_tax_deduction,
    q."number" AS number

FROM base q