需求:订单扣款,需要循环遍历每条可用积分记录,然后按订单总额逐个扣除,效率太低了,找了各个论坛找到一个比较合适的解决方案
解决方案:需sql语句和代码共同实现(ps:实在是不懂存储过程)
第一步:
select * from (select Id,CreationTime,sum(Point) over(order by CreationTime,Id) as sumamount from PointRecord) a where a.sumamount<=100
第二步:
上面的sql语句查询的结果分为2种情况:
1.若查询出的积分总和刚好>=100,那么皆大欢喜,查询出来的数据正是我们需要的
2.若查询出的积分<100,则会缺少最后一条数据,需要在业务代码中补充
最终形成完全体,终于不用循环遍历查询数据库了,用此方法,2条查询语句即可搞定
参考博客:https://bbs.csdn.net/topics/392186054