mysql - 如何使用连接表而不使用 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
它显示唯一的订单 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
)
推荐阅读
- c# - Task.WhenAny with cancellation of the non completed tasks and timeout
- python - 在 SQL Server 2017 中启用 Python
- javascript - having trouble chaining multiple axios request
- typescript - 如何为 blueprintjs Select 组件使用异步数据源?
- apache-flink - 了解 Apache Flink 仪表板的输出
- c++ - 如何正确地从txt文件中提取数据
- jenkins - Jenkins Groovy:更新所有节点中的标签
- android - 事件“onWindowFocusChanged”是否适用于主屏幕上的小部件?
- rust - 如何使用 const *T 成员声明 #[no_mangle] pub 静态符号
- java - 理解 Java 源代码:为什么这个 null 处理逻辑如此复杂?