代码之家  ›  专栏  ›  技术社区  ›  atoms

删除相互连接的行

  •  0
  • atoms  · 技术社区  · 8 年前

    我有一个结果集,其中包含:订单ID、该订单的总数以及其中的项目数量。

    有些总数是负数(如果发生退款),而其他总数是正数。我想计算一个订单总数,而不是负值。

    orders_id  order_total    products_quantity  customers_id  
    ---------  -------------  -----------------  --------------
      1140898  -99.95830000   -1                         459800
      1140868  99.95830000    1                          459800
      1140867  99.95833333    1                          459800
       866932  -106.33333333  -2                         459800
       860100  125.08333333   3                          459800
       857864  106.33333333   2                          459800
    

    将导致

    orders_id  order_total    products_quantity  customers_id  
    ---------  -------------  -----------------  --------------
      1140867  99.95833333    1                          459800
       860100  125.08333333   3                          459800
    

    我尝试编写一个指针来迭代每个结果,存储最后一个订单总数,并检查当前行是否存在差异。

    只要负序在正序之前或之后,这就有效。不幸的是,情况并非总是如此。

    有人能解释我应该坚持什么方法/方法来确保实现下面的输出吗?

    1 回复  |  直到 8 年前
        1
  •  1
  •   symcbean    8 年前

    根据你的描述,这个问题是不可能的。考虑:

    orders_id  order_total    customers_id  
    ---------  -------------  --------------
    1          -100           1
    2          50             1
    3          50             1
    4          50             1
    

    (我假设您只想考虑每个值只影响特定客户的“净值”)。

    在上述情况下,订单id=1可被视为抵消2和3,输出中保留4,输出中保留2,或输出中保留2和4,输出中保留3。

    如果负数量的行与一个或多个正数量的行不完全匹配怎么办?即使 一些 否定的组合加上肯定的组合,你需要尝试每一种可能的组合-只是计算算法的顺序会让我头疼(O(N!)我想2。