问题是获取上个月的周五、周六和周日的数量,我无法得到理想的解决方案。
我将上个月定义为
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
我尝试寻找周末,但绝对不能满足我的需求。
虽然这个问题可以通过评论中建议的日历表来解决,但我不喜欢构建表来保存众所周知的数据。
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)