SQL计算几个月内的疾病天数
我目前有一个非常糟糕的书面查询,它计算出了几个月内的实际病假(例如,如果员工的病假开始日期为2017年1月1日,结束日期为2017年3月1日,它将计算出他们应该工作的所有病假(例如,周一至周五,但没有固定的工作模式)并在他们生病的几个月内分开工作)。当前报告运行一个会计年度需要10分钟以上 我想重新编写查询,使其性能更好,并且(可能)更准确 我有三个主要的工作表:SQL计算几个月内的疾病天数,sql,sql-server,date,reporting-services,calculation,Sql,Sql Server,Date,Reporting Services,Calculation,我目前有一个非常糟糕的书面查询,它计算出了几个月内的实际病假(例如,如果员工的病假开始日期为2017年1月1日,结束日期为2017年3月1日,它将计算出他们应该工作的所有病假(例如,周一至周五,但没有固定的工作模式)并在他们生病的几个月内分开工作)。当前报告运行一个会计年度需要10分钟以上 我想重新编写查询,使其性能更好,并且(可能)更准确 我有三个主要的工作表: 员工填写开始时间和结束时间的“活动”表。因为这记录了所有的活动,所以他们的午休时间显示为活动的间隙-[----]午休时间[----
- 员工填写开始时间和结束时间的“活动”表。因为这记录了所有的活动,所以他们的午休时间显示为活动的间隙-[----]午休时间[----]
- 显示疾病开始日期和结束日期的疾病表
- 一个日历表,它有你能想象到的所有格式的日期
EMP ID | Start Date | End Date | Location ID
--------|------------------|------------------|-------------
1 | 01/02/2017 08:30 | 19/03/2017 23:59 | 20
2 | 04/02/2017 08:30 | 06/02/2017 23:59 | 4
3 | 02/02/2017 09:00 | 03/02/2017 23:59 | 15
4 | 03/02/2017 08:45 | 03/02/2017 23:59 | 7
5 | 05/02/2017 08:30 | 10/04/2017 23:59 | 9
活动表:
| EMP ID | Start Date | End Date | Activity Type | Location ID | Group ID |
|--------|------------------|------------------|---------------|-------------|----------|
| 1 | 02/01/2017 13:18 | 02/01/2017 17:00 | 11 | 20 | 1 |
| 1 | 02/01/2017 08:30 | 02/01/2017 12:12 | 11 | 20 | 1 |
| 2 | 02/01/2017 13:18 | 02/01/2017 17:00 | 13 | 4 | 4 |
| 2 | 02/01/2017 08:30 | 02/01/2017 12:12 | 13 | 4 | 4 |
| 3 | 02/01/2017 13:18 | 02/01/2017 17:00 | 1 | 15 | 2 |
| 3 | 02/01/2017 08:30 | 02/01/2017 12:12 | 1 | 15 | 2 |
| 4 | 02/01/2017 13:18 | 02/01/2017 17:00 | 4 | 7 | 5 |
| 4 | 02/01/2017 08:30 | 02/01/2017 12:12 | 4 | 7 | 5 |
| 5 | 02/01/2017 13:18 | 02/01/2017 17:00 | 10 | 9 | 3 |
| 5 | 02/01/2017 08:30 | 02/01/2017 12:12 | 10 | 9 | 3 |
| 5 | 02/01/2017 17:00 | 02/01/2017 18:00 | 3 | 9 | 3 |
结果将在SSR表/矩阵中使用,如下所示:
| Group | Location | Total Sickness Days - Months (fiscal year - April-Mar) |
|-------|----------|----------------------------------------------------------|
| 1 | 20 | xx |
| 2 | 4 | xx |
| 3 | 15 | xx |
| 4 | 7 | xx |
| 5 | 9 | xx |
我不确定这样一个问题的最佳做法是什么。我们将非常感谢您的帮助
编辑:逻辑
- 当某人生病超过其工作日的50%时,病假被计算在内。如果有人在工作日工作了50%后生病回家,这不算一天
- 改天轮班不会重叠