SQL查询以获取过去12个月内符合条件的记录的运行总数
我正在尝试查询一个表,并获得过去12个月的运行总数。如果两个日期字段的范围在多个月内,则记录可能会在一个多月内丢失。字段为DueDate和DeferralDate 例如,假设我有以下4条记录: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
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水平化选择结果