首页 > 解决方案 > 如何使用连接表而不使用 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 number1212 有四个article_idid 45,76,47,48 但是一旦我使用group by它显示唯一的订单 id 但没有得到 48 最后更新的记录而不是返回 45。

是否有可能获得DISTINCT 关键字。

标签: mysqlsqldatabase

解决方案


如果您的 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
)

推荐阅读