![](/img/trans.png)
[英]unique records in mysql one-to-many join without DISTINCT or GROUP BY
[英]How to get unique records with join tables and without using group by
我想從 2 個表中獲取唯一記錄而不使用Group By
而不是我想使用DISTINCT
因為當我使用group by
它不會返回最后更新的記錄。
我在 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_id
id 45,76,47,48 但是一旦我將它與group by
一起使用group by
它就會顯示唯一的訂單 ID,但沒有獲得 48 最后更新的記錄,而不是返回 45。
是否可以使用DISTINCT
關鍵字獲得。
如果您的 mysql 版本為 8.0+,則可以使用 row_number() 函數
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
)
如果我理解正確的話,每個訂單的響應都有多行——並且您需要每個訂單的最新響應。
您想過濾數據,而不是聚合數據。 我認為這可以滿足您的要求:
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;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.