在SQL中计算日期范围

时间:2018-09-27 20:01:29

标签: sql sql-server date

因此,我试图找出一种SQL语法,该语法可使我根据将所有内容都分成几个月的表创建日期范围。这通常很容易,除了可能会出现“跳过”月份的小警告。在这种情况下,我们需要考虑这些因素来创建范围。

例如:

enter image description here

日期范围是我要创建的列-对于A部分,它实际上很简单,但B部分(突出显示)-如果在“ A”部分中有“中断”,我不确定如何拆分日期范围个月

感谢所有帮助!

1 个答案:

答案 0 :(得分:3)

这是一个悬而未决的问题-但是要花几个月的时间。因此,只需从开始日期中减去序列号即可。对于连续的月份,这将是恒定的,可用于定义连续月份的每个时段。

通常,我会将数据汇总到以下范围:

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;

请注意,我已将范围结尾放在单独的列中。那就是我想要的结果。当然,您可以根据需要将它们转换为字符串并设置其格式。