有没有办法以特定日期频率(例如工作日)查询 table?

Is there a way to query a table in a specific date frequency (for example business days)?

假设我们有一个 SQL table 包含不同日期的条目,例如

main_table:

id (PK) 日期(PK) 工作日 价值
1 '01-06-2021' 星期二 20
1 '02-06-2021' 周三 20
1 '04-06-2021' 周五 20
1 '05-06-2021' 星期六 20
1 '07-06-2021' 星期一 20
1 '08-06-2021' 星期二 20

我想检索“30-05-2021”和“07-06-2021”之间的条目。但结果 output_table table 应该采用工作日格式,这样

output_table:

id (PK) 日期(PK) 工作日 价值
1 '31-05-2021' 星期一
1 '01-06-2021' 星期二 20
1 '02-06-2021' 周三 20
1 '03-06-2021' 周四
1 '04-06-2021' 周五 20
1 '07-06-2021' 星期一 20
1 '08-06-2021' 星期二 20

如果我使用简单的 SELECT * WHERE date>='30-05-2021' AND date <= '07-06-2021' 查询 table ,则会出现以下问题:

基本上我的想法是创建一个工作日 table (date_table),然后在 date_table:

上使用 main_table 的左连接
SELECT main_table.value 
FROM date_table
LEFT JOIN main_table.id ON (date_table.weekly_dates = main_table.date AND main_table.id = 1)
WHERE date_table.weekly_dates >= '30-05-2021'
  AND date_table.weekly_dates <= '07-06-2021'
ORDER BY date_table.weekly_dates

但是,有没有更优雅的解决方案,不需要创建额外的 table?有没有办法直接在 SQL 查询中使用它?我也更喜欢查询table并使用编程语言重新索引table(例如,Python重新索引)。

非常感谢

Postgres 支持 generate_series() 这使得这非常简单:

select i.id, gs.date, to_char(gs.date, 'Dy') as dow, m.value
from (select distinct id from main_table) i cross join
     generate_series('2021-05-30'::date, '2021-06-07'::date, interval '1 day'
                    ) gs(date) left join
     main_table m
     on m.id = i.id and m.date = gs.date
where to_char(gs.date, 'Dy') not in ('Sat', 'Sun');