-1
我有以下情况,用户每月需要花费一些配额,直至达到年度上限。SQL Server按分区运行余额并按月分配
如图here
我无意中发现了一个问题因为如果用户获取年内每年封盖需要相应的批准提拔我已经成功地实现了这个。
以下查询给出了这些结果。 (使用SQL Server 2012)
SELECT *,
RemainingBalance = AnnualCapping - Sum(amount)
OVER (
partition BY userid, year, annualcapping
ORDER BY userid, year, month)
FROM exampleTx
WHERE userid = 1
AND year = 2015
数据
userId year month monthname name surname annualCapping amount RemainingBalance
1 2015 1 January Joe Black 500,00 40,00 460,00
1 2015 2 February Joe Black 500,00 40,00 420,00
1 2015 3 March Joe Black 500,00 40,00 380,00
1 2015 4 April Joe Black 500,00 40,00 340,00
1 2015 5 May Joe Black 500,00 40,00 300,00
1 2015 6 June Joe Black 500,00 40,00 260,00
1 2015 7 July Joe Black 500,00 40,00 220,00
1 2015 8 August Joe Black 500,00 40,00 180,00
1 2015 9 September Joe Black 1000,00 40,00 **960,00**
1 2015 10 October Joe Black 1000,00 40,00 **920,00**
1 2015 11 November Joe Black 1000,00 40,00 **880,00**
1 2015 12 December Joe Black 1000,00 40,00 **840,00**
在九月的每月津贴应该是成正比的剩余一年。
4 months = 1000 * 4/12 = 333.33
和剩余余额293.33, 253.33, 213.33,173.33
。
我是否可以在不修改年度封顶场的情况下实现这一目标。即如果年度上限减少到333.33
,那么e会更简单,但这是我拥有的数据。
上个月的上限变化表示已经发生了晋升。它可以在任何月份发生。因此新的上限应该是成比例的。
您如何识别用户何时升职?是在不同的表中的信息?对所有用户来说都是一样的规则? –
在此示例中,年度上限被添加以表示促销。它实际上来自另一张桌子。共享的sql文件包含一个可以使用的简单示例。对于同一用户,同样的规则, – NotForFun
总是最后四个月会有比例计算吗? –