sql - 从基于范围的查询中获取整个月份
问题描述
我有这些数据,其中有租赁的开始日期和结束日期。我需要像下表那样在几个月内拿到它。
我尝试使用while循环并将每个月作为参数调用,然后进行计算,但我得到了许多单独的表,并且联合都不起作用或者我没有正确管理它。
您对此任务有很好的解决方案吗?
解决方案
如果您没有日历表,则可以使用临时 Tally/Numbers 表
例子
Select name
,startRental
,endRental
,durationDays = sum(1)
,month = month(D)
,year = year(D)
From (
Select *
From YourTable A
Join (
Select Top 10000 D=DateAdd(DAY,-1+Row_Number() Over (Order By (Select NULL)),'2000-01-01')
From master..spt_values n1, master..spt_values n2
) B on D between startRental and endRental
) A
Group by Name
,startRental
,endRental
,month(d)
,year(d)
退货
name startRental endRental durationDays month year
a 2019-06-30 2019-07-07 1 6 2019
a 2019-06-30 2019-07-07 7 7 2019
b 2019-03-02 2019-04-03 30 3 2019
b 2019-03-02 2019-04-03 3 4 2019
c 2019-01-01 2019-01-30 30 1 2019
d 2019-01-01 2019-05-01 31 1 2019
d 2019-01-01 2019-05-01 28 2 2019
d 2019-01-01 2019-05-01 31 3 2019
d 2019-01-01 2019-05-01 30 4 2019
d 2019-01-01 2019-05-01 1 5 2019
注意:我选择了任意日期 2000-01-01 和 10,000 天(最大日期为 2027-05-19)。
另外,我不确定我是否同意您 2019 年 6 月的 2 天期限。它应该是 1。
推荐阅读
- azure - azure blob 并行 blob 删除
- python - python 3中的列表值(ValueError)问题
- html - 有没有办法阻止CKeditor放置块引用的引号内的元素
- jenkins - 在 Jenkins 声明性管道中的 docker .withRun 命令中使用空格转义参数
- javascript - 是否可以更改 Google Chatbot 的“卡片”“宽度”?
- ruby-on-rails - 如何修复捆绑版本不兼容?
- c++ - 修复安装 OSRM 时使用“make”命令时的构建问题
- c++ - 是否有用于 boost::numeric::interval 长度的内置函数
- python - 在 Jupyter 仪表板视图中相互堆叠的单元格
- list - 遍历包含值列表的 shell 参数并将这些值写入文件