我想获取所有注册表之间的月份计数,但是如果以前已经计算过一年中的一个月,则无法再次计数。
如果月份是另一年,则可以计算。
例子:
#--|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
小提琴: 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
小提琴: http ://sqlfiddle.com/#!2/953e8c/1/0
这应该可以处理几个月之间的时间间隔,但是不能处理重叠的时间段,我不知道您的数据中是否存在重叠时间(在您的示例中不存在)。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句