上个月星期五、星期六和星期日的数量

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

问题是获取上个月的周五、周六和周日的数量,我无法得到理想的解决方案。

我将上个月定义为

DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE()) - 1, 0)  AS start_date,
DATEADD(MONTH, DATEDIFF(MONTH, -1, GETDATE()) - 1, -1) AS last_date 
(DATEDIFF(WK, DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE()) - 1, 0), DATEADD(MONTH, DATEDIFF(MONTH, -1, GETDATE()) - 3, -1)) * 2) 
      - (CASE WHEN DATENAME(dw, DATEADD(MONTH,DATEDIFF(MONTH, 0, GETDATE())-1, 0)) = 'Sunday'   THEN 1 ELSE 0 END)
      - (CASE WHEN DATENAME(dw, DATEADD(MONTH,DATEDIFF(MONTH, -1, GETDATE())-1, -1))   = 'Saturday' THEN 1 ELSE 0 END) as P 

我尝试寻找周末,但绝对不能满足我的需求。

sql sql-server select
1个回答
0
投票

虽然这个问题可以通过评论中建议的日历表来解决,但我不喜欢构建表来保存众所周知的数据。

我们来解决这个问题吧。
我们将从上个月的月底开始

eomonth

然后,我们可以使用
generate_series
来查询之前的三十天。我们只需要小心不要溢出到之前的一个月。
这可以解决大部分繁重的工作。从这里开始,只需使用
datepart
dw
参数来检查每个日期是星期几:

SELECT COUNT(*)
FROM   GENERATE_SERIES(0, 30)
WHERE  DATEPART(MONTH, DATEADD(DAY, -1 * value, EOMONTH(GETDATE(), -1))) = 
       DATEPART(MONTH, EOMONTH(GETDATE(), -1)) AND
       DATEPART(DW, DATEADD(DAY, -1 * value, EOMONTH(GETDATE(), -1))) IN (1, 6, 7)
© www.soinside.com 2019 - 2024. All rights reserved.