【问题标题】:Interest Calculation By Date按日期计算利息
【发布时间】:2016-02-23 11:56:17
【问题描述】:

我现在处于一个非常棘手的境地。使用 MSSQL 2012 Express。

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

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

解释

PARTY A 完成了我们的JOBWORK 价值 RS。 10000.00 日期为 2016 年 1 月 1 日。 公司CASH 于 2016 年 5 月 1 日支付 PARTY A RS 5000.00。 所以在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

【问题讨论】:

  • 你知道公式吗?
  • 请编辑您的问题并包含所需的结果。
  • 对于 10000 卢比,利息将为 10000*0.12*4Days/365Days
  • @GordonLinoff,显示的结构是所需的结果。在实际表格中,只有余额和利息列丢失。我能够成功计算余额,但利息列没有成功,因为下一行需要它。
  • 是的 LAG 对我有用,我根据需要更改了它。仍然面临其他领域的一些问题,但会尽力自己解决,否则会发布问题。

标签: sql sql-server sql-server-2012-express


【解决方案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 |
+-----+-------------------------+-----------+------------+

【讨论】:

  • 让我看看我这边
  • @Hermal Hmm 兴趣似乎有点高 =) 我可能会偏离 10 倍。我的数学很烂 =)
  • 没有。 1)您不能只使用“平均值”值,您需要实际天数。 2) 你绝对不能在货币计算中使用浮点数,因为像.1 这样的东西不能准确地表示,除其他外。
  • @Clockwork-Muse 这个sn-p 只是为了展示滞后以获得之前的余额和日期的基础知识。 AFAICT 您可以使用浮点数进行计算,当您将结果存储为十进制类型时。否则任何使用计算器的会计都会出错。
  • 在不使用LAG的情况下还有其他方法吗?
猜你喜欢
  • 2011-07-25
  • 1970-01-01
  • 2013-10-01
  • 2015-09-17
  • 2016-06-24
  • 1970-01-01
  • 1970-01-01
  • 2021-05-06
  • 1970-01-01
相关资源
最近更新 更多