sql - 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 日的记录中。
我不知道该怎么做。感谢所有帮助。
解决方案
如果您没有日历表(强烈推荐),您可以使用临时计数表与 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
推荐阅读
- c# - 删除 JArray 的成员
- algorithm - 不同三角形顶点的数量
- javascript - 如果 recaptcha 成功,则启用回调按钮(Google recaptcha v2)
- c# - 如何为 GlobalSuppression 类型添加 SuppressMessage?
- google-apps-script - 在 Gmail 插件中,如何访问 GmailApp.search 返回的所有线程的详细信息?
- types - 即使我将变量类型转换为完全相同的类,变量类型也会返回 false
- java - 将 Maven 父 pom/bom(没有 java src)发布到 Nexus 的正确方法是什么
- excel - EXCEL:通过查看相邻列在许多中查找实例
- netlogo - Netlogo:随机变换品种
- laravel - vue-froala-wysiwyg 图像不起作用 - Laravel 5.7