SQL中项目收入的日期范围计算?
Posted
技术标签:
【中文标题】SQL中项目收入的日期范围计算?【英文标题】:Date range calculation for a project revenue in SQL? 【发布时间】:2020-05-12 01:27:05 【问题描述】:我有一个表ClientProfile
,其中包含一个名为StartDate
的列,该列的数据类型是date
,第二列称为MonthlyRevenue
,这是numeric(18,2)
中的金额列,第三列称为ContractMonths
数据类型int
,它指定项目将处于活动状态的月数。用户需要选择一个日期范围,并且查询应该能够获取完整的日期范围(按月),指定每个月的金额。
例如:
项目 A 将从 2020-03-01
(1st March
) 开始,合约将运行 6 个月,因此当用户选择日期 02-2020
到 12-2020
时。
我应该能够得到这样的结果:
Month Revenue
-----------------
02-2020 0
03-2020 100
04-2020 100
05-2020 100
06-2020 100
07-2020 100
08-2020 100
09-2020 0
10-2020 0
11-2020 0
12-2020 0
我非常感谢任何帮助,因为我被困在这一点上并且无法弄清楚这一点。
【问题讨论】:
请告诉我们你到目前为止做了什么?因为“我被困在这一点上,无法弄清楚这一点”。干杯! 【参考方案1】:一种方法是递归 CTE 来生成月份:
with months as (
select @startmonth as mon
union all
select dateadd(month, 1, mon)
from months
where mon < @endmonth
)
select months.mon, coalesce(cp.monthlyrevenue, 0) as revenue
from months left join
clientprofile cp
on cp.project = @project and
cp.startdate <= months.mon and
dateadd(month, cp.contractmonths, cp.startdate) >= months.mon;
如果期限可以超过100个月,则需要添加option (maxrecursion 0)
。
或者,您可以在您的应用程序中构建一个月历表,然后直接使用该表执行几乎相同的操作。
【讨论】:
谢谢 Gordon,这正是我一直在寻找的东西,它奏效了。以上是关于SQL中项目收入的日期范围计算?的主要内容,如果未能解决你的问题,请参考以下文章