因此,我试图找出一种SQL语法,该语法可使我根据将所有内容都分成几个月的表创建日期范围。这通常很容易,除了可能会出现“跳过”月份的小警告。在这种情况下,我们需要考虑这些因素来创建范围。
例如:
日期范围是我要创建的列-对于A部分,它实际上很简单,但B部分(突出显示)-如果在“ A”部分中有“中断”,我不确定如何拆分日期范围个月
感谢所有帮助!
答案 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;
请注意,我已将范围结尾放在单独的列中。那就是我想要的结果。当然,您可以根据需要将它们转换为字符串并设置其格式。