请教一个sql 利息计算的。

ggt87125 2013-05-30 08:17:25
利率表
1. 2012-01-01 至 2012-04-30 利息是 10%
2. 2012-05-01 至 2013-06-30 利息是 12%
2. 2013-07-01 至 2099-01-01 利息是 11%

存取表
2012-01-03 存 50000
2013-01-03 取 15000

截止到现在的利息sql应该怎么写呢 ?主要是这个日期上应该怎么处理呢



...全文
802 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
zbdzjx 2013-06-03
  • 打赏
  • 举报
回复
如果是我,直接生成一个表,存放每天的利率,这样计算起来就很简单多了。 从2012-1-1到2099-1-1,也就是31778条记录。
zbdzjx 2013-06-03
  • 打赏
  • 举报
回复
引用 14 楼 ggt87125 的回复:
[quote=引用 13 楼 zbdzjx 的回复:] 如果是我,直接生成一个表,存放每天的利率,这样计算起来就很简单多了。 从2012-1-1到2099-1-1,也就是31778条记录。
你好 你说一下思路吗?[/quote] 表中就两列:日期,利率。 日期从2012-1-1到2099-1-1。 2012-01-01 至 2012-04-30 利率是 10%/365 2012-05-01 至 2013-06-30 利率是 12%/365 2013-07-01 至 2099-01-01 利率是 11%/365 2012-01-03 存 50000 算利息的SQL语句是select 50000*利率 from 表 where 日期 between '2012-01-03' and getdate() 2013-01-03 取 15000 算利息的SQL语句是select 15000*利率 from 表 where 日期 between '2013-01-03' and getdate() 将上面两个结果相减,就是实际利息了。 当然,也可以计算50000,从2012-01-03到2013-01-03的利息,再加上35000从2013-01-03到现在的利息。 如果2013-10-01的利率变了,如变成9%,就用SQL语句update 表 set 利率=0.09/365 where 日期>='2013-10-01'来更新一下就可以了。
ggt87125 2013-06-03
  • 打赏
  • 举报
回复
引用 13 楼 zbdzjx 的回复:
如果是我,直接生成一个表,存放每天的利率,这样计算起来就很简单多了。 从2012-1-1到2099-1-1,也就是31778条记录。
你好 你说一下思路吗?
hgwyl 2013-06-02
  • 打赏
  • 举报
回复
1、判断 存款日期 属于哪一个利息区间 2、处理第一个利息期间的利息 3、处理剩余利息期间的利息 可能前台处理起来需要稍微复杂点 利息表 ——添加区间标记,比如101,102,103 ——比如101代表从1月1日至4月30日的利息区间 存款表 ——添加存款时,记录区间标记 ——比如2月10日存入5000,对比利息表记录应为101,代表是在第一个利息区间存入的 ——有利于快速判断所属的第一个利息区间以及提取利息表中的利率进行处理 ——再处理>101的所有区间利息 思路大概这样吧,暂时只想到这样解决。
ggt87125 2013-06-02
  • 打赏
  • 举报
回复
就相当于 5000*10天*利率1.5 + 5000*20天*利率1.0 + 5000*80天*利率0.8 只是这个 利息变更的时间是不一样的 ,只算利息是多少
ggt87125 2013-06-02
  • 打赏
  • 举报
回复
引用 11 楼 hgwyl 的回复:
1、判断 存款日期 属于哪一个利息区间 2、处理第一个利息期间的利息 3、处理剩余利息期间的利息 可能前台处理起来需要稍微复杂点 利息表 ——添加区间标记,比如101,102,103 ——比如101代表从1月1日至4月30日的利息区间 存款表 ——添加存款时,记录区间标记 ——比如2月10日存入5000,对比利息表记录应为101,代表是在第一个利息区间存入的 ——有利于快速判断所属的第一个利息区间以及提取利息表中的利率进行处理 ——再处理>101的所有区间利息 思路大概这样吧,暂时只想到这样解决。
谢谢啊 这么晚还在 我想想来 。
mfkpie 2013-06-01
  • 打赏
  • 举报
回复
关注关注关注关注
ggt87125 2013-06-01
  • 打赏
  • 举报
回复
引用 8 楼 hgwyl 的回复:
确实描述得不太清楚 1、利率的处理方式是什么? ——复利形式。到期结算后,本利相加作为下一次的本金? ——单利形式。 2、单笔存款5000,产生利息500,本息和5500,还款2000后,剩余3500如何处理? ——新的利息计算是以存款当时利率?以部分还款利率? 以前做过类似的系统,具体记不起来了。 业务流程上处理得相对复杂一点的。
单利模式, 只要计算出不同期间的利息就可以了 ,本金是不变的,剩余的 继续以最新的利率进行计算。 到年底会统计这一年的总利息是多少 单笔存款5000,产生利息500,这里不管利息是多少,那么还款2000后,剩余3000 ,继续以3000计算利息 , 产生利息200 ,那么结果就是 本金 = 3000 ,利息 = 500+200
hgwyl 2013-06-01
  • 打赏
  • 举报
回复
确实描述得不太清楚 1、利率的处理方式是什么? ——复利形式。到期结算后,本利相加作为下一次的本金? ——单利形式。 2、单笔存款5000,产生利息500,本息和5500,还款2000后,剩余3500如何处理? ——新的利息计算是以存款当时利率?以部分还款利率? 以前做过类似的系统,具体记不起来了。 业务流程上处理得相对复杂一点的。
ggt87125 2013-05-31
  • 打赏
  • 举报
回复
顶一下 有没有人能帮一下。。
ggt87125 2013-05-30
  • 打赏
  • 举报
回复
引用 4 楼 u010886129 的回复:
大致了解你的需求了,就是有一个利率表,有一个人员取存金额的log表(含有人员,存/取金额,以及存/取日期),你需要计算当前日期这些人的利息。 。
好的 谢谢了

-- 利率表
 create table TableLV 
(
   FID                  int                            null,
   SDate                datetime                       null,
   Edate                datetime                       null,
   LV                   decimal(18,10)                 null
);
 
insert TableLV
select 1 ,'2013-01-01','2013-02-14',0.12 

insert TableLV
select 2 ,'2013-02-15','2013-03-15',0.1 

insert TableLV
select 3 ,'2013-03-15','2099-03-15',0.08

-- 存款表
create table TableTemp(
id int identity(1,1), --序号 
FBillno varchar(50),
FName varchar(20),
FBaseName int, 
BorrowDate datetime, --借款/还款日期
BMoney decimal(18,2), --借款/还款金额 
)
insert TableTemp
select ' ','张三',249,'2012-12-29',82166.03 
union select 'GZCD0000135','张三',249,'2013-01-21',11940.00
union select 'GZCD0000162','张三',249,'2013-02-05',300.00
union select 'GZCD0000136','张三',249,'2013-01-21',3876.40
union select 'GZCD0000171','张三',249,'2013-02-23',13864.00
union select 'GZCD0000172','张三',249,'2013-02-23',3431.20
union select 'GZCD0000189','张三',249,'2013-03-12',125000.00
union select 'GZCD0000205','张三',249,'2013-03-25',15667.00
union select 'GZCD0000206','张三',249,'2013-03-25',3601.60
union select 'GZCD0000226','张三',249,'2013-04-22',11916.00
union select 'GZCD0000227','张三',249,'2013-04-22',4980.80

select * from TableTemp
u010886129 2013-05-30
  • 打赏
  • 举报
回复
大致了解你的需求了,就是有一个利率表,有一个人员取存金额的log表(含有人员,存/取金额,以及存/取日期),你需要计算当前日期这些人的利息。 从逻辑上面来说,每个人最后的利息都和前面的存取有关系,而每个人存取的时间和次数又各不相同,所以客观说来 一次只能计算一个人某一个时间段的利息,这个没办法批处理。如果你用的是游标的话,我建议你编写一些函数,函数运行的效率要比游标快。如果你有测试数据的,可以贴我来,我来帮你写一个计算某个人某个时间段利息的函数。
ggt87125 2013-05-30
  • 打赏
  • 举报
回复
引用 1 楼 u010886129 的回复:
你这个业务描述得不清楚啊...你这个利息是多久结算一次没说,算不出来...一天一算 一周一算?还是一月一算.利率变化的时候在周期中,又该怎么算...既然结算周期出来...那么写这个还难么?... 如果按照最简单的利率不结算,每一天获得一点利率累加的话...我想这个没有难度吧...心算也许都能算出来.
人太多 每一笔的时间不一样 , 我是采用的游标循环 ,临时表 来处理日期 ,不知道有没有其他好的思路 来求每一个利息段里 个人利息 。。
ggt87125 2013-05-30
  • 打赏
  • 举报
回复
引用 1 楼 u010886129 的回复:
你这个业务描述得不清楚啊...你这个利息是多久结算一次没说,算不出来...一天一算 一周一算?还是一月一算.利率变化的时候在周期中,又该怎么算...既然结算周期出来...那么写这个还难么?... 如果按照最简单的利率不结算,每一天获得一点利率累加的话...我想这个没有难度吧...心算也许都能算出来.
这只是举了一个简单的例子 ,我是过一段时间会查看一次利息是多少 , 一次好几千个人的,心算,没那个本事啊
u010886129 2013-05-30
  • 打赏
  • 举报
回复
你这个业务描述得不清楚啊...你这个利息是多久结算一次没说,算不出来...一天一算 一周一算?还是一月一算.利率变化的时候在周期中,又该怎么算...既然结算周期出来...那么写这个还难么?... 如果按照最简单的利率不结算,每一天获得一点利率累加的话...我想这个没有难度吧...心算也许都能算出来.

27,579

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧