You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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匹配份数卖出订单剩余份数
1350
1430
1522

内容的提问来源于stack exchange,提问作者Ivan Ivanov

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 07:20:41