targo-backend/prisma/views/public/PayPeriods.sql

79 lines
1.5 KiB
SQL

WITH anchor AS (
SELECT
'2023-12-17' :: date AS anchor_sunday
),
series AS (
SELECT
(gs.gs) :: date AS period_start,
((gs.gs + '13 days' :: INTERVAL)) :: date AS period_end,
((gs.gs + '18 days' :: INTERVAL)) :: date AS payday
FROM
generate_series(
(
(
SELECT
anchor.anchor_sunday
FROM
anchor
)
) :: timestamp WITH time zone,
(((CURRENT_DATE + '1 mon' :: INTERVAL)) :: date) :: timestamp WITH time zone,
'14 days' :: INTERVAL
) gs(gs)
),
numbered AS (
SELECT
series.period_start,
series.period_end,
series.payday,
(
EXTRACT(
year
FROM
series.payday
)
) :: integer AS pay_year,
row_number() OVER (
PARTITION BY (
EXTRACT(
year
FROM
series.payday
)
)
ORDER BY
series.payday
) AS pay_period_no
FROM
series
)
SELECT
pay_year,
pay_period_no,
period_start,
period_end,
payday,
(
(
to_char(
(period_start) :: timestamp WITH time zone,
'YYYY-MM-DD' :: text
) || '->' :: text
) || to_char(
(period_end) :: timestamp WITH time zone,
'YYYY-MM-DD' :: text
)
) AS label
FROM
numbered
WHERE
(
(
payday >= ((CURRENT_DATE - '6 mons' :: INTERVAL)) :: date
)
AND (
payday <= ((CURRENT_DATE + '1 mon' :: INTERVAL)) :: date
)
)
ORDER BY
period_start;