У меня есть набор результатов, содержащий; 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.
Это работает до тех пор, пока отрицательный порядок приходит до или после положительного. К сожалению, это не всегда так.
Может ли кто-нибудь объяснить, какой подход/методы я должен придерживаться, чтобы обеспечить результат ниже?
Исходя из вашего описания, проблема невозможна. Рассматривать:
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, я думаю).