如何在MySQL中查找一年中从1月到7月丢失的月数
我有一个名为View_uncollected的视图如何在MySQL中查找一年中从1月到7月丢失的月数,mysql,date,datetime,count,Mysql,Date,Datetime,Count,我有一个名为View_uncollected的视图 |RemitNo|ID|Employer| AP_From | AP_To |Amount| | 1 |1 | a |2016-01-01|2016-01-31|200.00| | 2 |1 | a |2016-02-01|2016-02-29|200.00| | 3 |1 | a |2016-03-01|2016-03-31|200.00| | 4 |1 | a
|RemitNo|ID|Employer| AP_From | AP_To |Amount|
| 1 |1 | a |2016-01-01|2016-01-31|200.00|
| 2 |1 | a |2016-02-01|2016-02-29|200.00|
| 3 |1 | a |2016-03-01|2016-03-31|200.00|
| 4 |1 | a |2016-04-01|2016-05-31|400.00|
| 5 |1 | a |2016-06-01|2016-06-30|200.00|
| 6 |2 | b |2016-01-01|2016-03-31|600.00|
| 7 |2 | b |2016-04-01|2016-04-30|200.00|
| 8 |2 | b |2016-05-01|2016-05-31|200.00|
| 9 |3 | c |2016-01-01|2016-01-31|200.00|
| 10 |3 | c |2016-01-01|2016-01-31|200.00|
| 11 |3 | c |2016-03-01|2016-03-31|200.00|
我需要找出从2016年1月到7月少了多少个月
根据上表,存在一些复杂情况:
员工仅在2016年1月至6月支付。还差一个月。
雇员B仅在2016年1月至5月支付。还差两个月。
雇主于1月2日和3月支付工资。还差5个月。我们不会考虑一月的其他付款方式是二月。
我如何计算每个雇主的缺勤月数
我所做的是使用这个7-count的分组ID,因为我认为每一行=一个月。但在审查我的结果后,有些雇主有一排=2个月,比如4个月。我当时知道这是错误的,因为它只计算行数,而不计算月数
这背后的原因是,我们需要知道2016年1月至7月有多少汇款未收
谢谢你的建议和评论。抱歉,这是一个新手问题这是一个基本查询,允许您获取已支付的月份 部分结果: 最后查询: 输出
计算两个日期之间的差值并将所有行相加如何
SELECT Employer, 7-SUM(TIMESTAMPDIFF(MONTH, AP_from, DATE_ADD(AP_to,INTERVAL 1 DAY))) as missingmonth
FROM tablename
GROUP BY Employer;
考虑以下几点
SELECT * FROM my_table;
+---+
| i |
+---+
| 2 |
| 3 |
| 5 |
| 8 |
+---+
SELECT 7 - COUNT(DISTINCT i) x FROM my_table WHERE i BETWEEN 1 AND 7;
+---+
| x |
+---+
| 4 |
+---+
在本例中,我使用了一个简单的整数列,我称之为I,但它也可以是日期。其他人建议您需要某种日历或实用工具表。我在证明你不会。我只是从应该存在的数字中减去不同月份/整数的数量
|RemitNo|ID|Employer| AP_From | AP_To |Amount|
| 1 |1 | a |2016-01-01|2016-01-31|200.00|
| 2 |1 | a |2016-02-01|2016-02-29|200.00|
| 3 |1 | a |2016-03-01|2016-03-31|200.00|
| 4 |1 | a |2016-04-01|2016-05-31|400.00|
| 5 |1 | a |2016-06-01|2016-06-30|200.00|
| 6 |2 | b |2016-01-01|2016-03-31|600.00|
| 7 |2 | b |2016-04-01|2016-04-30|200.00|
| 8 |2 | b |2016-05-01|2016-05-31|200.00|
| 9 |3 | c |2016-01-01|2016-01-31|200.00|
| 10 |3 | c |2016-01-01|2016-01-31|200.00|
| 11 |3 | c |2016-03-01|2016-03-31|200.00|
根据上表,存在一些复杂情况:
员工仅在2016年1月至6月支付。少了一个月
从它。
雇员B仅在2016年1月至5月支付。2个月就够了
错过了。
雇主于1月2日和3月支付工资。5个月是
错过了。我们不会考虑一月的其他付款方式。
二月
现在,在我看来,雇主a全额支付了2016年1月1日至2016年6月30日期间到期的款项,6月份的款项已在汇款4上支付。如果我们选择按雇主分组的总金额,我们将得到
|Employer|Sum |
| a |1200.00|
| b |1000.00|
| c | 600.00|
现在,如果我们假设每个雇主每月需要支付200英镑,并且从2016-01-01到2016-06-30的累计月数为6个月,那么最合理的查询是
从表中选择雇主,200*6-累计金额作为余额,累计金额/200作为到期月,其中AP_FROM=>“2016-01-01”和AP_To 0
我还没有测试脚本,但我相信这正是您所需要的
编辑:
我相信这已经解决了,尽管没有任何答案被标记为正确答案。:] 你需要一个日历表,谷歌搜索,大量的在线教程只是想知道如果在同一笔付款上支付几个月,金额不应该超过一个月吗?@JuanCarlosOropeza是的,先生,我现在编辑我的示例。你还应该检查描述,因为数据显示a在五次付款中支付了全部6个月,b在三次付款中只遗漏了一次Sir,选择“五月”作为月份,“2016-05-01”作为开始,“2016-05-31”作为结束工会都遗漏了吗?先生,我在汇款4中的例子是从2016-04-01-2016-05-31是从四月到五月怎么样?怎么了?如果你看到部分结果,你会看到这两个月,i代表什么?在这个例子中,我使用了一个简单的整数列,我称之为i,但它也可以很容易地成为日期。其他人建议您需要某种日历或实用工具表。我在证明你不会。我只是从应该存在的数字中减去不同月份/整数的数量。
|RemitNo|ID|Employer| AP_From | AP_To |Amount|
| 1 |1 | a |2016-01-01|2016-01-31|200.00|
| 2 |1 | a |2016-02-01|2016-02-29|200.00|
| 3 |1 | a |2016-03-01|2016-03-31|200.00|
| 4 |1 | a |2016-04-01|2016-05-31|400.00|
| 5 |1 | a |2016-06-01|2016-06-30|200.00|
| 6 |2 | b |2016-01-01|2016-03-31|600.00|
| 7 |2 | b |2016-04-01|2016-04-30|200.00|
| 8 |2 | b |2016-05-01|2016-05-31|200.00|
| 9 |3 | c |2016-01-01|2016-01-31|200.00|
| 10 |3 | c |2016-01-01|2016-01-31|200.00|
| 11 |3 | c |2016-03-01|2016-03-31|200.00|
|Employer|Sum |
| a |1200.00|
| b |1000.00|
| c | 600.00|