我正在尝试从一个日期开始计算一个月中工作日的数量。 我的目标是期望栏。知道如何使用 SQL 脚本实现它吗?
不清楚
Weekday
列是您输入的一部分还是输出的一部分。但是你确实说过 just from a date 所以我会假设它是输出(为什么 id 需要重复我不知道)。您可以从 to_char() 函数中获取日期名称。然后在 Window 函数中使用它row_number() over()
。 (见这里,这里和这里)
with test(dt) as
( select dt::date
from generate_series( date '2020-01-01'
, date '2020-01-22'
, interval '1 day'
) gs(dt)
)
-- your query starts here.
select dt "Date"
, wd "Weekday"
, (row_number(*) over(partition by wd order by dt))::text || '.' || wd "Expected"
from (select dt, to_char(dt, 'Day') wd
from test
) sq
order by dt;
CTE 严格用作数据生成器。见演示
仅供参考。国际观众最好使用 ISO 8601 日期格式 yyyy-mm-dd。无论当地惯例如何,它都是明确的。如果您的天数没有超过 12,我们就无法知道您使用的是哪种格式(mm-dd-yyyy 或 dd-mm-yyyy)。
您可以计算自本月开始以来已经过去了多少周,并将结果加 1。这是星期几的索引号。
extract(day from dt)::int - 1) / 7 + 1
完整示例:
with test(dt) as
(select dt::date
from generate_series(date '2020-01-01'
, date '2020-01-22'
, interval '1 day'
) gs(dt))
select dt, (extract(day from dt)::int - 1) / 7 + 1 || '. ' || to_char(dt, 'Day')
from test
order by dt