Untitled
unknown
plain_text
9 days ago
4.4 kB
4
Indexable
USE SCHEMA {{ SNOWFLAKE_DATABASE_NAME }}.{{ EXTERNAL_TABLES_SCHEMA }}; CREATE OR REPLACE PROCEDURE generate_TBSummary(currentCustomDate DATE) RETURNS STRING LANGUAGE SQL AS $$ BEGIN -- Truncate the TBSummary table before inserting new data TRUNCATE TABLE PUB.TBSummary; INSERT INTO PUB.TBSummary ( query_date, value_date, is_report_day, current_cutoff_date, current_effective_date, last_cutoff_date ) WITH CTE_PARAM AS ( SELECT :currentCustomDate AS CustomCurrentDate ), CTE_DateList AS ( -- Generate 60 dates ending at CustomCurrentDate SELECT SEQ4() AS seq, DATEADD(DAY, -SEQ4(), (SELECT CustomCurrentDate FROM CTE_PARAM)) AS AsOfDate FROM TABLE(GENERATOR(ROWCOUNT => 60)) ), CTE_Holidays AS ( SELECT HOLIDAY_DT FROM PIPELINE.HK_FA_CITI_CUSTOM_COMM_CALENDAR ), CTE_BaseCalendar AS ( SELECT AsOfDate, CASE WHEN DAYOFWEEK(AsOfDate) IN (0, 6) OR EXISTS (SELECT 1 FROM CTE_Holidays WHERE HOLIDAY_DT = AsOfDate) THEN 0 ELSE 1 END AS IsWorkingDay FROM CTE_DateList ), CTE_WorkCalendar AS ( SELECT AsOfDate, IsWorkingDay, SUM(CASE WHEN IsWorkingDay = 1 THEN 1 ELSE 0 END) OVER (ORDER BY AsOfDate) AS WorkdaySeq FROM CTE_BaseCalendar ), CTE_AccountingPeriodFiltered AS ( SELECT * FROM PIPELINE.HK_FA_CITI_COMM_ACTG_PERIOD WHERE efctv_dt BETWEEN DATEADD(YEAR, -1, :currentCustomDate) AND :currentCustomDate ), AccountingPeriodWithPrev AS ( SELECT curr.efctv_dt AS current_effective_date, curr.cutoff_dt AS current_cutoff_date, prev.cutoff_dt AS last_cutoff_date, ROW_NUMBER() OVER (PARTITION BY curr.efctv_dt ORDER BY prev.efctv_dt DESC) AS rn FROM CTE_AccountingPeriodFiltered curr LEFT JOIN CTE_AccountingPeriodFiltered prev ON prev.efctv_dt < curr.efctv_dt ), AccountingPeriod AS ( SELECT current_effective_date, current_cutoff_date, last_cutoff_date FROM AccountingPeriodWithPrev QUALIFY rn = 1 ), QueryDateCTE AS ( -- Get T-1 date from CustomCurrentDate SELECT * FROM CTE_WorkCalendar WHERE AsOfDate = DATEADD(DAY, -1, :currentCustomDate) ), ValueDateCTE AS ( -- Get latest working day before QueryDate (T-2) SELECT * FROM CTE_WorkCalendar WHERE AsOfDate < (SELECT AsOfDate FROM QueryDateCTE) AND IsWorkingDay = 1 QUALIFY ROW_NUMBER() OVER (ORDER BY AsOfDate DESC) = 1 ), FirstWorkingDayAfterCutoff AS ( SELECT ap.current_cutoff_date, MIN(wc.AsOfDate) AS first_report_day FROM AccountingPeriod ap JOIN CTE_WorkCalendar wc ON wc.IsWorkingDay = 1 AND wc.AsOfDate > ap.current_cutoff_date GROUP BY ap.current_cutoff_date ), FinalResult AS ( SELECT qd.AsOfDate AS query_date, vd.AsOfDate AS value_date, CASE WHEN vd.AsOfDate = ap.current_cutoff_date AND vd.IsWorkingDay = 1 AND qd.AsOfDate = fr.first_report_day THEN 1 ELSE 0 END AS is_report_day, ap.current_cutoff_date, ap.current_effective_date, ap.last_cutoff_date, ROW_NUMBER() OVER (ORDER BY qd.AsOfDate DESC) AS rn FROM QueryDateCTE qd JOIN ValueDateCTE vd ON 1=1 JOIN AccountingPeriod ap ON ap.last_cutoff_date < vd.AsOfDate AND ap.current_cutoff_date >= vd.AsOfDate JOIN FirstWorkingDayAfterCutoff fr ON fr.current_cutoff_date = ap.current_cutoff_date ) -- Return only the current report row SELECT query_date, value_date, is_report_day, current_cutoff_date, current_effective_date, last_cutoff_date FROM FinalResult WHERE is_report_day = 1 QUALIFY rn = 1; RETURN 'Procedure executed successfully'; END; $$;
Editor is loading...
Leave a Comment