gpt4 book ai didi

mysql - 选择计算多个日期注册表中两个日期之间的不同月份?

转载 作者:行者123 更新时间:2023-11-29 12:45:26 24 4
gpt4 key购买 nike

我想获取所有注册表之间的月份计数,但是如果一年中的一个月已经被统计过,则无法再次统计。
如果该月份是来自另一年的,则可以计算.

示例:

#--|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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com