【发布时间】:2021-08-15 11:11:47
【问题描述】:
我有一个包含某些日期范围数据的表格。当用户选择开始日期和结束日期时,结果集将类似于这两个日期之间的所有日期范围以及这两个日期之间的所有缺失日期范围。
例如:
日期范围表
ID| fromdate | todate |
----------------------------
1 | 5-May-21 | 10-May-21 |
2 | 17-May-21 | 25-May-21 |
这是我的主表,我在下面提到了我想要的上表的所有结果集
如果用户选择:2021 年 5 月 5 日 到 2021 年 5 月 25 日
预期结果:
ID| fromdate | todate |
----------------------------
1 | 5-May-21 | 10-May-21 |
0 | 11-May-21 | 16-May-21 |
2 | 17-May-21 | 25-May-21 |
如果用户选择:2021 年 5 月 6 日 到 2021 年 5 月 23 日
预期结果:
ID| fromdate | todate |
-----------------------------
1 | 6-May-21 | 10-May-21 |
0 | 11-May-21 | 16-May-21 |
2 | 17-May-21 | 23-May-21 |
如果用户选择:2021 年 5 月 1 日 到 2021 年 5 月 28 日
预期结果:
ID| fromdate | todate |
----------------------------
1 | 1-May-21 | 4-May-21 |
1 | 5-May-21 | 10-May-21 |
0 | 11-May-21 | 16-May-21 |
2 | 17-May-21 | 25-May-21 |
2 | 26-May-21 | 28-May-21 |
这里有一些不相似但尝试找到的问题:
SQL how to write a query that return missing date ranges?
提前致谢。
【问题讨论】:
-
我没有共享代码的权限。但我做了这种逻辑:```声明@startdate datetime declare @enddate datetime set @startdate = '2021-04-24 00:00: 00.000' 设置@enddate = '2021-06-30 00:00:00.000' 插入@tempPeriod 选择ID , FromDate , ToDate , CID = lead(ID,1,null) over (Order By fromdate) from tablename where (FromDate >= @startdate 和 FromDate = @startdate 和 ToDate
-
edit 直接对问题进行任何澄清。我们不想看到实时代码,我们希望您使用测试数据和测试代码创建一个minimal reproducible example。
-
最后一个expect结果集看不懂;为什么第一行有一个
1的ID,而表中不存在这些日期,为什么最后一行有一个2的ID出于同样的原因? -
@DaleK 这是我在这个网站上的第一个问题,我自己尝试这个。我明白你在说什么我会努力解决我的错误谢谢你的指导。
-
@Larnu,对不起,你错了,我在最后一个结果集上添加了 ID 错误的 ID,我想要虚拟创建的记录的 0 ID。谢谢
标签: sql sql-server date date-range between