SQL查询以获取过去12个月内符合条件的记录的运行总数

SQL查询以获取过去12个月内符合条件的记录的运行总数,sql,sql-server,tsql,Sql,Sql Server,Tsql,我正在尝试查询一个表,并获得过去12个月的运行总数。如果两个日期字段的范围在多个月内,则记录可能会在一个多月内丢失。字段为DueDate和DeferralDate 例如,假设我有以下4条记录: Id | Date1 | Date2 1 01/20/2020 05/29/2020 2 02/01/2020 08/14/2020 3 04/01/2020 04/30/2020 4 07/08/2020 12/31/2020 我的结果如下所示: No

我正在尝试查询一个表,并获得过去12个月的运行总数。如果两个日期字段的范围在多个月内,则记录可能会在一个多月内丢失。字段为DueDate和DeferralDate

例如,假设我有以下4条记录:

Id | Date1      | Date2
1    01/20/2020   05/29/2020
2    02/01/2020   08/14/2020
3    04/01/2020   04/30/2020
4    07/08/2020   12/31/2020
我的结果如下所示:

Nov 19 | Dec 19 | Jan 20 | Feb 20 | Mar 20 | Apr 20 | May 20 | Jun 20 | Jul 20 | Aug 20 | Sept 20 | Oct 20
0        0        1        2        2        3        2        1        2        2        1         1
除了12个独立的查询之外,我不知道如何进行此操作,但可能有一种更好的方法我不知道。希望有人能给我指出正确的方向


提前感谢。

如果您想在列中显示,那么它是条件聚合。假设您希望本月有任何重叠:

select sum(case when date1 < '2019-12-01' and date2 >= '20190-11-01' then 1 else 0 end) as cnt_201911,
       sum(case when date1 < '2020-01-01' and date2 >= '20190-12-01' then 1 else 0 end) as cnt_201912,
       sum(case when date1 < '2020-02-01' and date2 >= '2020-01-01' then 1 else 0 end) as cnt_202001,
       sum(case when date1 < '2020-03-01' and date2 >= '2020-02-01' then 1 else 0 end) as cnt_202002,
       . . .
from t
   
选择sum(日期1<'2019-12-01'和日期2>='20190-11-01'时的情况,然后选择1其他0结束)作为cnt_201911,
合计(日期1<'2020-01-01'和日期2>='20190-12-01'时的情况,然后1其他0结束)为cnt_201912,
合计(当日期1<'2020-02-01'和日期2>='2020-01-01'时,则为1,否则为0结束)为cnt_202001,
合计(当日期1<'2020-03-01'和日期2>='2020-02-01'时,则为1,否则为0结束)为cnt_202002,
. . .
从t
选择总和(计数(日期1),计数(日期2)), 格式(日期1,'MMMyy') 从表名 其中月份(日期1)=月份(日期2)

然后必须使用Pivot水平化选择结果