MySQL月报不准确

MySQL月报不准确,mysql,datediff,Mysql,Datediff,我的公司为IT部门引入了一个待命轮换表。我创建了一个MySQL表,其中详细说明了谁接听电话,他们何时接听电话,以及下一个人在每次轮班结束时接听电话的时间 以下是从5月底至6月初采集的样本(已删除名称): |seq__num | date_taken | date_relinquished | user | |-----------|---------------|-----------------------|-----------| | 1 |

我的公司为IT部门引入了一个待命轮换表。我创建了一个MySQL表,其中详细说明了谁接听电话,他们何时接听电话,以及下一个人在每次轮班结束时接听电话的时间

以下是从5月底至6月初采集的样本(已删除名称):

|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日放弃呢?那是八月的三天。啊,从来没有想过有一个日历表,我已经创建了一个,我将开始使用上面的查询来搞乱它。干杯。你昏迷了吗?不幸的是没有。其他项目和复杂情况也随之出现,并被克服。