MySQL月报不准确
我的公司为IT部门引入了一个待命轮换表。我创建了一个MySQL表,其中详细说明了谁接听电话,他们何时接听电话,以及下一个人在每次轮班结束时接听电话的时间 以下是从5月底至6月初采集的样本(已删除名称):MySQL月报不准确,mysql,datediff,Mysql,Datediff,我的公司为IT部门引入了一个待命轮换表。我创建了一个MySQL表,其中详细说明了谁接听电话,他们何时接听电话,以及下一个人在每次轮班结束时接听电话的时间 以下是从5月底至6月初采集的样本(已删除名称): |seq__num | date_taken | date_relinquished | user | |-----------|---------------|-----------------------|-----------| | 1 |
|seq__num | date_taken | date_relinquished | user |
|-----------|---------------|-----------------------|-----------|
| 1 | 2015-05-29 | 2015-06-05 | A |
| 2 | 2015-06-05 | 2015-06-06 | B |
| 3 | 2015-06-06 | 2015-06-07 | C |
| 4 | 2015-06-07 | 2015-06-10 | B |
| 5 | 2015-06-10 | 2015-06-10 | A |
| 6 | 2015-06-10 | 2015-06-12 | B |
| 7 | 2015-06-12 | 2015-06-19 | C |
| 8 | 2015-06-19 | 2015-07-03 | D |
下一步是生成自动月度报告,该报告查询表格并输出每个用户待命的天数,以便财务部门知道他们需要支付多少费用。目前这是人工计算的
我的问题是:
SELECT user, SUM(DATEDIFF(date_relinquished, date_taken))
AS duration
FROM on-call_log
WHERE YEAR(date_relinquished) = YEAR(CURRENT_DATE - INTERVAL 1 MONTH)
AND MONTH(date_relinquished) = MONTH(CURRENT_DATE - INTERVAL 1 MONTH)
GROUP BY user
然而,如果在一个月内完全保持待命状态,这种方法确实有效。如果有人从一个月到下一个月随时待命,它会报告整个期间,这会产生不准确的情况。而不是像6月实际有30天那样报告,比如:
A 4
B 6
C 8
D 12
A 7
B 6
C 8
D 14
它考虑了人员A在上个月的待命情况以及人员D在下个月的待命情况,如下所示:
A 4
B 6
C 8
D 12
A 7
B 6
C 8
D 14
我有点不知所措,不知该如何准确地报告。有人有什么建议或想法吗?提前感谢。一个解决方案是使用日历表-即使是包含所有可能的未来日期的日历表也小得令人沮丧 那么您的查询可能是这样的-我假设每个用户每天只统计一次on调用(不同)
对不起,为了清楚起见,您能否指定所需的结果。我希望报告每个人上个月的待命天数。例如,目前它没有考虑到六月有30天。是的。请提供所需的结果,在所需的时间跨度内,如果一个同事在7月31日接受电话,并在8月1日结束,他是否在7月的一天和8月的一天获得学分?如果他在8月1日接受,并在8月3日放弃呢?那是八月的三天。啊,从来没有想过有一个日历表,我已经创建了一个,我将开始使用上面的查询来搞乱它。干杯。你昏迷了吗?不幸的是没有。其他项目和复杂情况也随之出现,并被克服。