我尝试计算订阅订单的SQL Server数据库中的每月重复收入。
获取一些详细信息如何计算?
假设您有10位客户每人每月支付10美元。以下是计算MRR的方法。
所有非月度计划均按月计算。因此,如果客户在年度计划上为您支付120美元,我们会在未来12个月内向MRR增加10美元。整齐!
因此,到目前为止,我所做的是处理所有原始数据,包括可能影响MRR指标的升级,降级,退款和取消,并准备下表:
DateCreated OrderID Price Months
2013-03-05 1 49.9500 12
2013-04-01 2 5.9500 1
2013-04-08 3 7.1100 12
2013-05-15 4 42.9500 3
2013-06-12 5 13.9850 6
2013-06-27 6 7.1100 6
2013-07-29 7 21.9250 3
现在为MRR。我希望有两列,第一列是月份和年份的开始日期(例如01-03-2013),第二列是基于MRR定义的总收入。
例如,OrderID
1应除以12并将结果添加到当前和接下来的11个月。 <{1}} 2应该是该月的所有订阅计划为期1个月并继续。
我知道如何处理其余部分吗?
示例结果:
OrderID
每月添加的价格:
Month MRR
01-03-2013 4.1625
01-04-2013 4.1625 + 5.95 + 0.5925
01-05-2013 4.1625 + 0.5925 + 14.31
01-06-2013 4.1625 + 0.5925 + 14.31 + 2.33 + 1.185
01-07-2013 4.1625 + 0.5925 + 14.31 + 2.33 + 1.185
01-08-2013 4.1625 + 0.5925 + 2.33 + 1.185 + 7.30
01-09-2013 4.1625 + 0.5925 + 2.33 + 1.185 + 7.30
01-10-2013 4.1625 + 0.5925 + 2.33 + 1.185 + 7.30
01-11-2013 4.1625 + 0.5925 + 2.33 + 1.185
01-12-2013 4.1625 + 0.5925
01-01-2014 4.1625 + 0.5925
01-02-2014 4.1625 + 0.5925
01-03-2014 0.5925
我将结果留在MRR栏中的操作,以使其清楚。显然,结果应该是它们的总和。
创建输入表:
49.95/12 = 4.1625
5.95/1 = 5.95
7.11/12 = 0.5925
42.95/3 = 14.31
13.985/6 = 2.33
7.11/6 = 1.185
21.925/3 = 7.30
答案 0 :(得分:0)
我使用递归CTE来尝试获得您可能需要的整个月份范围,但我调整到本月1日 然后我根据该订单是否适用于该月加入,允许它继续保持当前n-1个月(其中n是您的&#39;月份&#39;)然后我收集所有JOINER中的数据(您也可以选择*来查看它)然后我将JOINER聚合成一个月的总和。
我将所有日期调整到本月的第一天以便使用
{{ csrf_token() }}
我认为这很有希望
WITH MTHS AS (SELECT dateADD(day, -DAY(MIN(datecreated)) + 1, MIN(datecreated)) MD, (SELECT MAX(dateadd(month,o2.months, o2.datecreated)) FROM ORDERS o2) AS MXD FROM Orders
UNION ALL
SELECT DATEADD(month,1,MD), MTHS.MXD FROM MTHS WHERE DATEADD(month,1,MD) < MTHS.mxd),
JOINER AS
(
select MD, ord.price / ord.months mlyprice from MTHS
JOIN ORDERS ord ON dateadd(day, -day(ord.datecreated) + 1, ord.datecreated)
BETWEEN
dateadd(month,1-ord.months,MTHS.md )
AND
MTHS.md
)
SELECT J.MD,SUM(mlyprice) FROM JOINER J GROUP BY J.MD;