Удалить строки, которые чистят друг друга

0

У меня есть набор результатов, содержащий; order_ids, общее количество для этого заказа и количество элементов внутри.

Некоторые итоговые значения являются отрицательными (если произошло возмещение), а другие - положительные. Я хотел бы вычислить количество заказов, которые order_total, не чистые с отрицательными значениями.

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

Я попытался написать курсор для итерации по каждому результату, сохранения последнего элемента order_total и проверки текущей строки для diff.

Это работает до тех пор, пока отрицательный порядок приходит до или после положительного. К сожалению, это не всегда так.

Может ли кто-нибудь объяснить, какой подход/методы я должен придерживаться, чтобы обеспечить результат ниже?

  • 0
    Ваша проблема чрезмерно упрощена. Что произойдет, если первый или второй ряд будут дублированы снова? Какую версию вы бы сохранили?
  • 0
    Если бы они были продублированы, то один был бы пропущен, а второй отменил бы следующий. Почему у нас нет простого способа связать два заказа, я не знаю ... Это доказательство PITA для расчета
Показать ещё 2 комментария
Теги:
database

1 ответ

1
Лучший ответ

Исходя из вашего описания, проблема невозможна. Рассматривать:

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

(Я предполагаю, что вы хотите только учитывать, что каждое значение влияет только на "сеть" для конкретного клиента)

В приведенном выше случае order_id = 1 может считаться смещенным 2 и 3, оставляя 4 на выходе, 3 4 оставляя 2 на выходе, или 2 и 4 оставляют 3 на выходе.

Что делать, если строки с отрицательными суммами не соответствуют точной сумме для одного или нескольких из них с положительными результатами? Даже если какая-то комбинация негативов добавляет некоторую комбинацию положительных результатов, вам нужно попробовать все возможные комбинации - просто вычисление порядка этого алгоритма заставляет мою голову болеть (O (N!) ^ 2, я думаю).

  • 1
    Я думаю, что здесь предполагается, что отмена заказа ТОЧНО совпадает с отменой заказа, только значение является отрицательным. В этом случае вы не могли бы сказать, какой из соответствующих заказов отменен, но эта информация все равно вам не нужна.
  • 0
    Спасибо symcbean. Конечная цель - рассчитать заказы, сделанные клиентом в заданном диапазоне дат. К сожалению, возвраты + обмены хранятся в БД как обычные заказы с отрицательными величинами. Короче говоря, если нет другой строки, а количество> 0, его необходимо включить.
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню