SQL中数据拆分与聚合:买卖订单金额匹配处理
订单金额(份数)匹配方案(版本1:仅调整卖出记录)
我来帮你梳理这个CSV订单的匹配逻辑,尤其是你提到的仅修改卖出订单、保留买入记录不变的版本1规则,咱们结合你给出的具体例子来拆解:
核心需求
你需要将CSV中的buy订单与sell订单按金额(这里是份数)精准匹配,当单个或连续的sell订单累计份数不足以覆盖某笔buy订单时,需要拆分后续的sell订单,只取所需的差额部分,剩余的sell份额留待匹配其他buy订单。
具体执行步骤(以你提到的例子为例)
目标买入订单:OrderID=1,10份,剩余需匹配份数remaining = 10
- 遍历第一笔可匹配的卖出订单
OrderID=3(5份):
5 ≤ 10,全额取用该订单,remaining = 10 - 5 = 5,标记该卖出订单已全额匹配 - 遍历下一笔卖出订单
OrderID=4(3份):
3 ≤ 5,全额取用该订单,remaining = 5 - 3 = 2,标记该卖出订单已全额匹配 - 遍历下一笔卖出订单(假设为
OrderID=5,4份):
4 > 2,拆分该卖出订单:取出2份用于匹配,remaining = 2 - 2 = 0,完成当前买入订单的匹配;剩余的2份保留为新的未匹配卖出订单,等待匹配其他买入订单
落地实现的关键逻辑
如果要写代码处理的话,核心逻辑可以这样(伪代码示例):
# 假设读取后的CSV数据按订单时间/ID排序,存在两个列表:buy_orders、sell_orders current_sell_idx = 0 for buy in buy_orders: remaining = buy['quantity'] while remaining > 0 and current_sell_idx < len(sell_orders): current_sell = sell_orders[current_sell_idx] if current_sell['quantity'] <= remaining: # 全额匹配当前卖出订单 record_match(buy['OrderID'], current_sell['OrderID'], current_sell['quantity']) remaining -= current_sell['quantity'] current_sell_idx += 1 else: # 拆分卖出订单,仅取所需部分 record_match(buy['OrderID'], current_sell['OrderID'], remaining) # 更新原卖出订单的剩余数量 sell_orders[current_sell_idx]['quantity'] -= remaining remaining = 0
匹配后的记录示例
| 买入OrderID | 匹配的卖出OrderID | 匹配份数 | 卖出订单剩余份数 |
|---|---|---|---|
| 1 | 3 | 5 | 0 |
| 1 | 4 | 3 | 0 |
| 1 | 5 | 2 | 2 |
内容的提问来源于stack exchange,提问作者Ivan Ivanov
相关产品推荐
相关产品推荐

