Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在SQL中计算日期范围_Sql_Sql Server_Date - Fatal编程技术网

在SQL中计算日期范围

在SQL中计算日期范围,sql,sql-server,date,Sql,Sql Server,Date,因此,我试图找出一种sql语法,它允许我基于一个表创建一个日期范围,该表将所有内容分为几个月。这通常是很容易的,除了可能出现“跳过”月份的小警告。在这种情况下,我们需要在创建范围时考虑这些因素 例如: 日期范围是我想要创建的列——对于A部分,它实际上是非常直接的,但是B部分(突出显示)——我不确定如果月份中出现“中断”,如何划分日期范围 感谢您的帮助 这是一个缺口和孤岛问题——但要持续几个月。所以,只需从开始日期中减去一个序号。对于连续月份,这将是常量,可用于定义连续月份的每个期间 通常,我会

因此,我试图找出一种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发布数据截图。