gpt4 book ai didi

mysql - 日期周期跨季节分布

转载 作者:行者123 更新时间:2023-11-30 01:34:39 24 4
gpt4 key购买 nike

在我的 MySQL 数据库表中,我有以下日期周期(季节):

sstart,send,sname
2013-05-01,2013-05-31,'season1'
2013-06-01,2013-06-30,'season2'

我想创建 SQL 查询,该查询将针对给定的开始和结束日期将此期间划分为季节,并提供有关期间每个部分的持续时间的信息:

例如,对于以下时间段 (qstart,qend) 2013-04-20,2013-06-10,此查询应返回:

2013-04-20,2013-04-30,'',11           <-- this is important - I need it
2013-05-01,2013-05-31,'season1',31 <-- 31 days of my period is in season1
2013-06-01,2013-06-10,'season2',10 <-- 10 days of my period is in season2

我有以下 SQL 查询:

SELECT sid,sname,DATEDIFF(IF(send>@qend,@qend,send),IF(sstart<@qstart,@qstart,sstart))+1
FROM seasons WHERE sstart<=@qend AND send>=@qstart

我的问题是,当我的经期(qstart,qend)在数据库中的第一个季节之前开始或在最后一个季节之后结束时,此查询不会返回我需要的这些尾部。

最佳答案

我没有 mySQL,但这应该能为您指明正确的方向:

使用以下内容代替查询中的 Seasons 表:

   FROM 
(
select * from seasons
union
select '' as [sname],'1/1/1980' as [sStart],DateAdd(dd,-1,MIN([sStart])) as [send]
from Seasons
union
select '' as [sname],DateAdd(dd,+1,MAX([send])) as [sstart],'12/31/2021' as [Send]
from Seasons
) Seasons

基本上,添加两个“虚拟行”来表示第一个日期之前和最后一个日期之后的季节...

关于mysql - 日期周期跨季节分布,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17066130/

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