Как получить уникальные записи с таблицами объединения и без использования групп по - PullRequest
0 голосов
/ 11 февраля 2019

Я хочу получить уникальную запись из 2 таблиц без использования Group By вместо того, чтобы использовать DISTINCT, потому что когда я использовал group by, он не возвращает последние обновленные записи.

Я использовал следующеезапрос с группировкой по.

SELECT  au.id, o.order_id,o.payment_method, o.order_date,au.article_id FROM `orders` as o INNER JOIN austpost_api_response as au ON  o.order_id = au.order_id  where o.shipment_status = 1 AND au.active_status = 1 AND o.order_status = 0 group by o.order_id
ORDER BY `au`.`id`  DESC

Возвращает уникальный идентификатор order_id, но не получает последнее обновленное значение order_id

Например ...

Order number 1212 имеет четыре article_idid 45,76,47,48, но как только я использовал это с group by, он отображает уникальный идентификатор заказа, но не получает 48 последних обновленных записей вместо возврата 45.

возможно ли получить с помощью DISTINCTключевое слово.

Ответы [ 2 ]

0 голосов
/ 11 февраля 2019

Если я правильно понимаю, у вас есть несколько строк для ответов для каждого заказа - и вы хотите самую последнюю для каждого заказа.

Вы хотите фильтровать данные, а неагрегировать это.Я думаю, что это то, что вы хотите:

SELECT au.id, o.order_id, o.payment_method, o.order_date, au.article_id
FROM orders o INNER JOIN
     austpost_api_response au
     ON o.order_id = au.order_id  
WHERE o.shipment_status = 1 AND
      au.active_status = 1 AND
      o.order_status = 0 AND
      au.id = (SELECT MAX(au2.id)
               FROM austpost_api_response au2
               WHERE au2.order_id = au.order_id AND
                     au2.active_status = 1
              )
ORDER BY au.id DESC;
0 голосов
/ 11 февраля 2019

Вы можете использовать функцию row_number (), если ваша версия mysql 8.0 +

select * from
(
SELECT  au.id, o.order_id,o.payment_method, o.order_date,au.article_id,row_number() over(partition by o.order_id order by o.order_date desc) as rn
FROM `orders` as o INNER JOIN austpost_api_response as au ON  o.order_id = au.order_id  where o.shipment_status = 1 AND au.active_status = 1 AND o.order_status = 0 
)A where rn=1

ИЛИ Вы можете попробовать использовать коррелированный подзапрос

SELECT  au.id, o.order_id,o.payment_method, o.order_date,au.article_id
FROM `orders` as o INNER JOIN austpost_api_response as au ON  o.order_id = au.order_id  
where o.shipment_status = 1 AND au.active_status = 1 AND o.order_status = 0 and o.order_date in 
(
  select max(o.order_date) from `orders` o1 where o.order_id = o1.order_id and o1.order_status = 0
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...