我有要求,我将需要获得一个员工的作用天数.
Scenario 1个
EmployeeId role effectiveFrom
1 A 1-Jan-2021
1 B 15-Jan-2021
对于角色A,1月份没有其他角色可用,因此角色A的天数将为14天.
Scenario 2个
EmployeeId role effectiveFrom
1 A 1-Jan-2021
1月份没有更多的角色可用,因此角色A的天数将是31天,即整个1月份.对于2月份,我预计会得到28个,因为这个角色也将在整个2月份有效.
Scenario 3个
EmployeeId role effectiveFrom
1 A 1-Jan-2021
1 B 15-Jan-2021
1 A 25-Jan-2021
要获取角色A的天数,逻辑为
- 1号到15号是14天.
- 25日到31日(1月31日)是6天.
- 14+6=20天
到目前为止,我提出的查询是这样的,
SELECT
DATEDIFF(MAX(effectiveFrom),
IF(MIN(effectiveFrom) = MAX(effectiveFrom),
MIN(effectiveFrom),
MIN(effectiveFrom))) + 1 daysWorked
FROM
EmployeeRoles
WHERE grade = 'A'
GROUP BY `employeeId`,effectiveFrom;
这只能给出场景1的结果1天.有人能指导我处理场景的实际方法吗?我已经研究了循环和窗口函数,但我对继续进行的最佳方法一无所知.