求解决思路或sql语句

十二恨 2017-08-23 08:48:49
本人新手,最近遇到一个问题。
我买一个东西,需要142个积分。
数据库中
积分 到期时间 姓名
50 20170912 haha
49 20171012 haha
30 20171112 haha
45 20171212 haha
。。。。。。

我怎么根据到期时间以此减去相应的积分,直到142积分扣完
数据库中就剩下

32 20171212 haha
这个有什么好的方法,或sql语句可以解决吗?

...全文
132 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
十二恨 2017-08-23
  • 打赏
  • 举报
回复
谢谢大家,已经解决了,我用函数和游标做的。
花开了叫我 2017-08-23
  • 打赏
  • 举报
回复
SQL> WITH t(credit,积分,到期时间,姓名)AS 2 (SELECT 142,50,'20170912','haha' FROM dual 3 UNION ALL 4 SELECT 142,49,'20171012','haha' FROM dual 5 UNION ALL 6 SELECT 142,30,'20171112','haha' FROM dual 7 UNION ALL 8 SELECT 142,45,'20171212','haha' FROM dual) 9 SELECT least(greatest(SUM(积分)OVER(PARTITION BY 姓名 ORDER BY 到期时间)-credit,0),积分), 10 到期时间, 11 姓名 FROM T; 12 / LEAST(GREATEST(SUM(积分)OVER(P 到期时间 姓名 ------------------------------ -------- ---- 0 20170912 haha 0 20171012 haha 0 20171112 haha 32 20171212 haha --自己再优化下吧
花开了叫我 2017-08-23
  • 打赏
  • 举报
回复
sum()over order by 再 greatest, least
风中的千纸鹤 2017-08-23
  • 打赏
  • 举报
回复
你应该需要保留的是在有效期内的积分剩余吧,那你可以这样写sql select * from (select 到期时间, 积分,(sum(积分) over(order by 到期时间))-142 val,姓名 from t where t.姓名='haha') a where a.val>0; 应该符合你的要求
acen_chen 2017-08-23
  • 打赏
  • 举报
回复
存储过程游标处理好了

17,082

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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