我需要一个查询来计算给定ITMaven从当前年份开始的所有“假期”类型的天数,不包括周末,假期可能持续几天或一天。如果假期持续几天,则假期的开始是开始,假期的结束是结束,如果假期是一天,则开始和结束具有相同的日期
目前我已经把假期加起来了,它验证假期是一天还是几天
我需要从假期天数总和中排除周末
表:kal_termin
id,start,end,id_typ
表格:卡尔乌切斯尼克
id,id_termin,id_informatyk
我的疑问
SELECT kal_uczestnik.id_informatyk, SUM(
CASE
WHEN start = end THEN 1
ELSE DATEDIFF(end, start) + 1
END
) as days_off
FROM kal_termin,kal_uczestnik
WHERE kal_termin.id=kal_uczestnik.id_termin AND kal_uczestnik.id_informatyk = 119 AND kal_termin.id_typ = 1 AND YEAR(start) = YEAR(CURRENT_DATE)
GROUP BY kal_uczestnik.id_informatyk;
1条答案
按热度按时间oaxa6hgo1#
您需要使用日历表或递归公用表表达式(CTE)来构建日历,如下例所示:
calendar
CTE构建一个当前年份中所有日期的列表,沿着是否每天is_weekend
。然后,我们根据calendar.date
是否介于start
和end
之间,将该列表连接到现有查询。仅包括is_weekend
= 0的日期。这假定start
和end
都包括在休息日中。如果不是这种情况,您可以更改联接标准。感谢@shanmukhavangaru标记this question。我不知道这个方法。不幸的是,接受的答案对于这个问题和引用的问题都有错误的矩阵,因为它不包括结束日期。There is an answer在提供正确字符串的页面上。
如果要使用建议的解决方案,则正确的矩阵(包括起始日期和终止日期)为:
并且,连接字符串为:
因此,给定现有查询,解决方案将是: