Untitled

 avatar
unknown
plain_text
11 days ago
9.5 kB
3
Indexable
WITH relevant_threshold_investment_allowance_deltas AS (
         SELECT DISTINCT
            iadva.id AS iadva_id,
            r.revtstmp AS revtstmp,
            iadva.revtype AS revtype,
            iadva.rev,
            iadva.management_delta AS delta,
            iadva.management_max_discount AS maxOrSpecialPrice,
            iadva.is_management_delta_locked AS deltaLocked,
            iadva.from_value AS fromValue,
            iadva.threshold_type AS thresholdType,
            iadva.group_investment_allowance_deltas_id AS giada_id,
            LAG(iadva.management_delta) OVER (PARTITION BY iadva.id ORDER BY r.rev) AS deltaBefore,
            LAG(iadva.management_max_discount) OVER (PARTITION BY iadva.id ORDER BY r.rev) AS maxOrSpecialPriceBefore,
            LAG(iadva.is_management_delta_locked) OVER (PARTITION BY iadva.id ORDER BY r.rev) AS deltaLockedBefore,
            LAG(iadva.from_value) OVER (PARTITION BY iadva.id ORDER BY r.rev) AS fromValueBefore,
            LAG(iadva.threshold_type) OVER (PARTITION BY iadva.id ORDER BY r.rev) AS thresholdTypeBefore
         FROM investment_allowance_delta_values_aud iadva
                  JOIN revinfo r ON iadva.rev = r.rev
--          WHERE iadva.rev = 25 AND iadva.group_investment_allowance_deltas_id = 20
     ),
     investment_allowance_history AS (
         -- Management Delta History
         SELECT DISTINCT
             iadva.id AS iadva_id,
             r.revtstmp AS timestamp,
--              giada.modification_date AS modificationDate,
--              giada.modified_by AS modifiedBy,
--              giada.date_from AS dateFrom,
--              giada.date_to AS dateTo,
--              'MANAGEMENT' AS roleType,
--              ps.name AS segmentName,
--              gda.group_discount_type AS discountType,
             giada.rev AS giada_rev,
             iadva.rev AS iadva_rev,
--              giada.id AS giada_id,
             CASE
                 WHEN giada.group_investment_allowance_deltas_bundle_id IS NOT NULL THEN 'TIME_CONDITIONS'
                 ELSE 'BASIC_CONDITIONS'
                 END AS conditionType
                         ,
             COALESCE((
                          SELECT
                              COUNT(*) -
                              COALESCE((
                                           SELECT COUNT(*)
                                           FROM relevant_threshold_investment_allowance_deltas t
                                           WHERE t.giada_id = giada.id
                                             AND t.rev <= giada.rev
                                             AND t.revtype = 2
                                       ), 0)
                          FROM relevant_threshold_investment_allowance_deltas t
                          WHERE t.giada_id = giada.id
                            AND t.rev <= giada.rev
                            AND t.revtype IN (0)
                      ), 0) AS thresholdCount
                         ,
--              LAG(COALESCE((
--                               SELECT
--                                   COUNT(*) -
--                                   COALESCE((
--                                                SELECT COUNT(*)
--                                                FROM relevant_threshold_investment_allowance_deltas t
--                                                WHERE t.giada_id = giada.id
--                                                  AND t.rev <= giada.rev
--                                                  AND t.revtype = 2
--                                            ), 0)
--                               FROM relevant_threshold_investment_allowance_deltas t
--                               WHERE t.giada_id = giada.id
--                                 AND t.rev <= giada.rev
--                                 AND t.revtype IN (0)
--                           ), 0)) OVER (PARTITION BY iadva.id ORDER BY r.revtstmp) AS thresholdCountBefore,
             CASE
                 WHEN giada.id IS NULL THEN LAG(iadva.group_investment_allowance_deltas_id) OVER (PARTITION BY iadva.id ORDER BY r.rev)
                 ELSE giada.id
                 END AS giada_id

         FROM investment_allowance_delta_values_aud iadva
                  JOIN revinfo r ON iadva.rev = r.rev
                  LEFT JOIN group_investment_allowance_deltas_aud giada
                       ON giada.id = iadva.group_investment_allowance_deltas_id
                  LEFT JOIN group_investment_allowance_deltas_bundles_aud giadba
                  ON giada.id = giadba.group_investment_allowance_deltas_id   --> basic
                    OR giadba.id = giada.group_investment_allowance_deltas_bundle_id   --> timely
                  LEFT JOIN price_segments ps
                    ON ps.id = giadba.price_segment_id
                  LEFT JOIN group_deltas_bundles gdb
                    ON giadba.group_deltas_bundle_id = gdb.id
                  LEFT JOIN groups g
                    ON gdb.id = g.group_deltas_bundle_id
                  LEFT JOIN group_discounts_aud gda
                    ON gda.id = g.discount_id
         WHERE giada.rev = iadva.rev
            OR giada.rev IS NULL  --> to include delete records
            OR (giada.rev != iadva.rev
                    AND giada.date_from != giada.date_to
                    AND iadva.rev = (SELECT MAX(iadva2.rev)
                              FROM investment_allowance_delta_values_aud iadva2
                              WHERE iadva2.group_investment_allowance_deltas_id = iadva.group_investment_allowance_deltas_id)
                )
     )

-- SELECT * FROM investment_allowance_history
SELECT
       iah.timestamp,
--        iah.roleType,
--        iah.segmentName,
       iah.conditionType,
--        iah.discountType,
--        iah.modifiedBy,
--        iah.modificationDate,
--        iah.dateFrom,
--        iah.dateTo,
--        iah.actionType,
       iah.giada_rev,
       iah.iadva_rev,
       iah.giada_id,
--        iah.iadva_id,
       iah.thresholdCount,
--        iah.thresholdCountBefore,
       ARRAY_AGG(iah.iadva_id) AS iadva_id_list,
--        COALESCE((
--              SELECT
--                  COUNT(*) -
--                  COALESCE((
--                               SELECT COUNT(*)
--                               FROM relevant_threshold_investment_allowance_deltas t
--                               WHERE t.giada_id = iah.giada_id
--                                 AND t.rev <= iah.giada_rev
--                                 AND t.revtype = 2
--                           ), 0)
--              FROM relevant_threshold_investment_allowance_deltas t
--              WHERE t.giada_id = iah.giada_id
--                AND t.rev <= iah.giada_rev
--                AND t.revtype IN (0)
--          ), 0) AS thresholdCount
--        ,
       LAG(COALESCE((
                        SELECT
                            COUNT(*) -
                            COALESCE((
                                         SELECT COUNT(*)
                                         FROM relevant_threshold_investment_allowance_deltas t
                                         WHERE t.giada_id = iah.giada_id
                                           AND t.rev <= iah.giada_rev
                                           AND t.revtype = 2
                                     ), 0)
                        FROM relevant_threshold_investment_allowance_deltas t
                        WHERE t.giada_id = iah.giada_id
                          AND t.rev <= iah.giada_rev
                          AND t.revtype IN (0)
                    ), 0)) OVER (PARTITION BY iah.giada_id ORDER BY iah.timestamp) AS thresholdCountBefore
       ,
       COALESCE((
                          SELECT JSON_AGG(
                                         JSON_BUILD_OBJECT(
                                                 'rev', t.rev,                      --> od usunięcia
                                                 'giada_id', t.giada_id,        --> od usunięcia
                                                 'iadva_id', t.iadva_id,        --> od usunięcia
                                                 'delta', t.delta,
                                                 'maxOrSpecialPrice', t.maxOrSpecialPrice,
                                                 'deltaLocked', t.deltaLocked,
                                                 'fromValue', t.fromValue,
                                                 'thresholdType', t.thresholdType,
                                                 'deltaBefore', t.deltaBefore,
                                                 'maxOrSpecialPriceBefore', t.maxOrSpecialPriceBefore,
                                                 'deltaLockedBefore', t.deltaLockedBefore,
                                                 'fromValueBefore', t.fromValueBefore,
                                                 'thresholdTypeBefore', t.thresholdTypeBefore
                                         )
                                 )
                          FROM relevant_threshold_investment_allowance_deltas t
                          WHERE t.giada_id = iah.giada_id
                            --> mozliwe ze jeszcze roleType match
                          AND t.rev = iah.giada_rev
                      ), '[]') AS threshold_details
       FROM investment_allowance_history iah
        GROUP BY iah.timestamp, iah.conditionType, iah.giada_rev, iah.iadva_rev, iah.giada_id, iah.thresholdCount;
Editor is loading...
Leave a Comment