我有一張表(假期),其中包含一年中的所有假期:

我需要制作一個表(t1),其中 1 列包含一年內的所有 365 天,另一列“描述”包含假期 /- 7 天范圍內的所有日期的假期名稱,對于此范圍之外的所有日期,“無”。
我能夠使用 generate_series 創建第一列(my_date:一年內的所有 365 天)并使用左連接嘗試創建第二列(描述)
WITH all_dates AS
SELECT my_date::date
FROM generate_series('2020-01-01', '2020-12-31', '1 day'::interval) my_date)
SELECT all_dates.my_date,
holidays.description
FROM all_dates
LEFT JOIN holidays
ON all_dates.my_date = holidays.holiday_date
創建下表。

但是,我需要它使 2020-01-02、2020-01-02、...、2020-01-08 具有“元旦”的描述,因為這些日期在 7 天的范圍內元旦等其他假期 7 天范圍內的其他日子(例如,2020 年 12 月 18 日到 2020 年 12 月 31 日之間日期的行將具有“圣誕節”描述)
我也不確定如何處理超過一個假期的 7 天范圍內的日子(父親節和獨立日有 7 天范圍內的重疊日期)。我需要它在 2020 年每天只有一排。
任何幫助,將不勝感激!
uj5u.com熱心網友回復:
試試下面的東西。您已經有了假期前后的范圍,所以在連接中使用它。然后,使用distinct on將結果限制為每個日歷日期一個,并調整order by以保留您想要的假期。
with all_dates as (
select my_date::date
from generate_series('2020-01-01',
'2020-12-31', '1 day'::interval) my_date
)
select distinct on (all_dates.my_date)
all_dates.my_date,
holidays.description
from all_dates
left join holidays
on all_dates.my_date
between holidays.holiday_date_min7
and holidays.holiday_date_plus7
order by all_dates.my_date,
abs(all_dates.my_date - holidays.holiday_date), -- keep closest
all_dates.my_date - holidays.holiday_date -- prefer upcoming holiday
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/481684.html
標籤:PostgreSQL
上一篇:PostgreSQL:如何聚合文本使其顯示在同一行中?(按id分組)
下一篇:回滾不適用于Go語言事務包裝器
