найти бракованные вещи из заказа клиента - PullRequest
0 голосов
/ 16 мая 2019

Мне нужно сгенерировать отчет об отклоненных позициях заказа, я должен сделать это, когда заказ завершит обработку системой и условия, которые я должен учитывать, что заказ прекратил обрабатываться:

  1. Статус заказа в процессе равен или больше 600
  2. Все позиции в заказе были отклонены и имеют статус 999

Я хочу сделать запрос SQL, который учитывает два предыдущих условия, чтобы вернуть мне отклоненные элементы из заказа, когда он больше не обрабатывается системой.

пример сценария:

enter image description here

Итак, я пробую их следующим образом

select * from order_detail_status 
where  order_number = 'OR_001'
and  process_status= '999'
and process_id = (select max(process_id) from  configuracion.order_detail_status where  order_number = 'OR_001' and process_status >= 600)

это сработало бы, если бы существовал только сценарий 1, но для сценария 2 запрос никогда не достигнет этого состояния, поэтому я пытаюсь добавить второе условие:

or (select distinct (process_status) from configuracion.order_detail_status where order_number = 'OR_002' ) = '999'

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

1 Ответ

1 голос
/ 16 мая 2019

Если вы хотите найти заказы, где ВСЕ элементы имеют process_status, равный 999, попробуйте что-то вроде этого:

SELECT order_number, MIN(process_status) AS minps, MAX(process_status) AS maxps
FROM order_detail_status 
GROUP BY order_number
HAVING minps=maxps AND minps=999

Группировка строк по порядку, а затем выполнение min () и max () дает вамсамый высокий и самый низкий статус для заказа.Если они совпадают, то для всех товаров в заказе будет только один статус.Если единичный статус 999 (или> 600), то у вас есть ответ.

HAVING похож на условие WHERE, но работает после того, как группировка завершена.

Результаты:

OR_002  999 999
...