在 SQL 中查找一个月中第 n 次出现的一天

问题描述 投票:0回答:2

我正在尝试从一个日期开始计算一个月中工作日的数量。 我的目标是期望栏。知道如何使用 SQL 脚本实现它吗?

enter image description here

postgresql date dayofweek
2个回答
0
投票

不清楚

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)。


0
投票

您可以计算自本月开始以来已经过去了多少周,并将结果加 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
© www.soinside.com 2019 - 2024. All rights reserved.