2016-02-23 78 views
1

我现在处于非常棘手的状况。使用MSSQL 2012 Express。按日期计算利息

我有一个voucher表,我从中检索PARTY A的详细信息。

在下面的查询结果中,除了最后一列INTEREST之外,我已成功获取所有详细信息。 在最后一栏中,我需要找到前一行BALANCEINTEREST AMOUNT

说明

PARTY A做了我们JOBWORK值得RS的。 10000.00日期01-01-2016。 公司CASH支付PARTY A RS 5000.00的日期05-01-2016。 所以在INTEREST列中,我需要计算RS的兴趣。 10000假设4天,假定利率为12%。 依此类推。

VOUCHER_NO  VOUCHER_DATE  FROM  TO  DR  CR  BALANCE  INTEREST 
-------------------------------------------------------------------------------------------------------- 
1     01-01-2016   PARTY A  JOBWORK    10000.00 -10000.00 
2     05-01-2016   CASH  PARTY A 5000.00    -5000.00  NEED INTEREST OF 10000.00 HERE 
3     15-01-2016   CASH  PARTY A 4000.00    -1000.00  NEED INTEREST OF 5000.00 HERE 
+0

你知道公式? –

+0

请编辑你的问题,并包括所需的结果。 –

+0

对于10000卢比,利息将是10000 * 0.12 * 4天/ 365天 – Hemal

回答

1

本人以365.25天/年计算。该数字更改为任何你需要:

SELECT*INTO #bal FROM(VALUES(1,{d'2016-01-01'},CAST(-10000.00 AS DECIMAL(28,2))),(2,{d '2016-01-05'},CAST(-5000.00 AS DECIMAL(28,2))),(3,{d '2016-01-15'},CAST(-1000.00 AS DECIMAL(28,2))))AS b(vno,dt,bal); 
SELECT 
    *, 
    interest=ROUND((LAG(bal)OVER(ORDER BY vno))*(.12*DATEDIFF(DAY,LAG(dt)OVER(ORDER BY vno),dt)/365.25),2) 
FROM #bal; 
DROP TABLE #bal; 

结果:

+-----+-------------------------+-----------+------------+ 
| vno |   dt   | bal | interest | 
+-----+-------------------------+-----------+------------+ 
| 1 | 2016-01-01 00:00:00.000 | -10000.00 | NULL  | 
| 2 | 2016-01-05 00:00:00.000 | -5000.00 | -13.140000 | 
| 3 | 2016-01-15 00:00:00.000 | -1000.00 | -16.430000 | 
+-----+-------------------------+-----------+------------+ 
+0

让我检查一下我的身边 – Hemal

+0

@Hermal嗯感兴趣似乎有点高=)我可能会失去一个因子10.我的数学糟糕=) –

+0

NO。 1)你不能只使用“平均”值,你需要实际的天数。 2)你** ABSOLUTELY **不能在货币计算中使用浮点数,因为像'.1'这样的东西不能完全表示,除此之外。 –