需求:訂單扣款,需要循環遍歷每條可用積分記錄,然后按訂單總額逐個扣除,效率太低了,找了各個論壇找到一個比較合適的解決方案
解決方案:需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