我想获取所有注册表之间的月份计数,但是如果一年中的一个月已经被统计过,则无法再次统计。
如果该月份是来自另一年的,则可以计算.
示例:
#--|Begin date|--|End Date---|
______________________________
#--|2014-01-01|--|2014-05-01-| 01 to 05 = 5 months
#--|2014-07-01|--|2014-07-31-| 1 month
#--|2014-08-01|--|2015-01-01-| 01/2014 to 01/2015 = 6 months
示例中的总月份数:
5+1+6 == 12 个月
我如何使用 SQL 获得此计数?
最佳答案
很确定这会让你得到你想要的:
select sum(mo_between)
from(
select begin_date, end_date, case when date_format(end_date,'%e') = 1
then 1 + period_diff(date_format(end_date,'%Y%m'),date_format(begin_date,'%Y%m'))
when period_diff(date_format(end_date,'%Y%m'),date_format(begin_date,'%Y%m')) = 0 then 1
else period_diff(date_format(end_date,'%Y%m'),date_format(begin_date,'%Y%m'))
end as mo_between
from tbl) x
fiddle : http://sqlfiddle.com/#!2/953e8c/2/0
您可以运行以下命令来逐行返回它:
select begin_date, end_date, case when date_format(end_date,'%e') = 1
then 1 + period_diff(date_format(end_date,'%Y%m'),date_format(begin_date,'%Y%m'))
when period_diff(date_format(end_date,'%Y%m'),date_format(begin_date,'%Y%m')) = 0 then 1
else period_diff(date_format(end_date,'%Y%m'),date_format(begin_date,'%Y%m'))
end as mo_between
from tbl
fiddle : http://sqlfiddle.com/#!2/953e8c/1/0
这应该处理几个月之间的间隙,但是它不会处理重叠的时期,我不知道您的数据中是否存在这种情况(您的示例中不存在)。
关于mysql - 选择计算多个日期注册表中两个日期之间的不同月份?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25517233/