首页 > 解决方案 > SQL - 在日期之间每天计算总 ID

问题描述

这是我的数据的样子

ID       StartDate        EndDate
1        1/1/2019         1/15/2019
2        1/10/2019        1/11/2019
3        2/5/2020         3/10/2020
4        3/10/2019        3/19/2019
5        5/1/2020         5/4/2020

我正在尝试获取数据集中每个日期的列表,以及该时间范围内有多少个 ID,聚合到日期级别。因此,对于 ID-1,它将在 2019 年 1 月 1 日、2019 年 1 月 2 日……到 2019 年 1 月 15 日的记录中。

我不知道该怎么做。感谢所有帮助。

标签: sqlsql-server

解决方案


如果您没有日历表(强烈推荐),您可以使用临时计数表与 CROSS APPLY 一起执行此任务

例子

Declare @YourTable Table ([ID] varchar(50),[StartDate] date,[EndDate] date)  
Insert Into @YourTable Values 
 (1,'1/1/2019','1/15/2019')
,(2,'1/10/2019','1/11/2019')
,(3,'2/5/2020','3/10/2020')
,(4,'3/10/2019','3/19/2019')
,(5,'5/1/2020','5/4/2020')


Select A.ID
      ,B.Date
 From  @YourTable A
 Cross Apply (
                Select Top (DateDiff(DAY,A.[StartDate],A.[EndDate])+1) Date=DateAdd(DAY,-1+Row_Number() Over (Order By (Select Null)),A.[StartDate])  
                From  master..spt_values n1,master..spt_values n2
                ) B

退货

ID  Date
1   2019-01-01
1   2019-01-02
1   2019-01-03
1   2019-01-04
1   2019-01-05
1   2019-01-06
1   2019-01-07
1   2019-01-08
1   2019-01-09
1   2019-01-15
2   2019-01-10
2   2019-01-11
....
5   2020-05-01
5   2020-05-02
5   2020-05-03
5   2020-05-04

推荐阅读