在SQL中计算日期范围
因此,我试图找出一种sql语法,它允许我基于一个表创建一个日期范围,该表将所有内容分为几个月。这通常是很容易的,除了可能出现“跳过”月份的小警告。在这种情况下,我们需要在创建范围时考虑这些因素 例如: 日期范围是我想要创建的列——对于A部分,它实际上是非常直接的,但是B部分(突出显示)——我不确定如果月份中出现“中断”,如何划分日期范围在SQL中计算日期范围,sql,sql-server,date,Sql,Sql Server,Date,因此,我试图找出一种sql语法,它允许我基于一个表创建一个日期范围,该表将所有内容分为几个月。这通常是很容易的,除了可能出现“跳过”月份的小警告。在这种情况下,我们需要在创建范围时考虑这些因素 例如: 日期范围是我想要创建的列——对于A部分,它实际上是非常直接的,但是B部分(突出显示)——我不确定如果月份中出现“中断”,如何划分日期范围 感谢您的帮助 这是一个缺口和孤岛问题——但要持续几个月。所以,只需从开始日期中减去一个序号。对于连续月份,这将是常量,可用于定义连续月份的每个期间 通常,我会
感谢您的帮助 这是一个缺口和孤岛问题——但要持续几个月。所以,只需从开始日期中减去一个序号。对于连续月份,这将是常量,可用于定义连续月份的每个期间 通常,我会将数据聚合到以下范围:
select col1, min(col2), max(col2)
from (select t.*, row_number() over (partition by col1 order by col2) as seqnum
from t
) t
group by col1, dateadd(month, - seqnum, col2);
事实证明,同样的想法也适用于窗口函数,因此:
select col1, col2,
min(col2) over (partition by col1, dateadd(month, - seqnum, col2)) as range_start,
max(col2) over (partition by col1, dateadd(month, - seqnum, col2)) as range_start
from (select t.*, row_number() over (partition by col1 order by col2) as seqnum
from t
) t;
请注意,我已将范围端点放在单独的列中。这就是我想要的结果。当然,您可以将它们转换为字符串,并按照自己的意愿对其进行格式化。减去1发布数据截图。