SELECT
mhy_order.id AS id,
mhy_order.id AS orderId,
mhy_trademark.id AS trademarkId,
mhy_trademark_type.id AS typeId,
mhy_order.order_type AS type,
mhy_trademark_type.type AS category,
mhy_trademark.`name` AS trademark,
mhy_trademark_type.registration_number AS registrationNumber,
mhy_applicant.`name` AS applicantName,
mhy_applicant.message_corp AS messageCorp,
IFNULL( mhy_order.complete, '否' ) AS isComplete,
mhy_applicant.custom_name AS contactUser,
mhy_order.charge AS charge,
mhy_order.notification_method AS noticeType,
mhy_order.notification_time AS noticeTime,
sys_user.username AS salesman,
mhy_order_progress.gen_time AS messageTime,
ROW_NUMBER() over ( PARTITION BY mhy_order_progress.order_id ORDER BY mhy_order_progress.gen_time DESC ) RowNum,
FROM
`mhy_trademark_type`
JOIN mhy_trademark ON `mhy_trademark_type`.trademark_id = mhy_trademark.id
JOIN mhy_order ON mhy_trademark.order_id = mhy_order.id
JOIN mhy_applicant ON mhy_order.applicant_id = mhy_applicant.id
JOIN `sys_user` ON `sys_user`.user_id = mhy_order.create_user_id -- JOIN mhy_applicant as tp ON mhy_order.transferor_id = tp.id
LEFT JOIN mhy_order_progress ON mhy_order_progress.order_id = mhy_order.id
目前的 SQL 就是这样 还是比较简单的,关键在于待分组的表 mhy_order_progress 是 left join 的,可能关联不到这张表。 导致 ```PARTITION BY mhy_order_progress.order_id`` 执行时,数据都跑一个分区里了,因为 mhy_order_progress.order_id 都是 null 。
数据库是 mysql8.0 最新版本。这个 SQL 还有个非常长的 where 以及分页。
1
liprais 2022-10-06 01:27:52 +08:00 via iPhone
partition by mhy_order.id 呗
看你到底要啥,是有 progress 的取最新的订单还是要干啥 |
2
xuanbg 2022-10-06 09:00:18 +08:00
你这个是要按订单的处理时间倒序排,那可不就是没处理的都在一块吗?虽然都在一块,但第二排序就不能安订单 id 排吗?
|
3
coderstory OP @liprais
假设有主表 tableA 和子表 tableB A 和 B 是一对多的关系 如果是简单关联查询 则查询出来的数量和 tableB 的数量是一致的对不对? 现在我想对查询结果做分组 按 tableA 的 id 分组 查询出来的数组 关联 tableB 中最新的一条 现在我用 PARTITION BY 对 tableB 中的外键分组 然后 查询 ROW_NUMBER 最后对查询结果 筛选 只要 ROW_NUMBER = 1 的行 这样就实现了分组后 取每组最后一条 .. 参考原型 --根据 x 分组后、根据 y,z 排序后取第一条 select * from ( select ROW_NUMBER() over(partition by x order by y,z desc) RowNum ,testTable.* from testTable) as t1 where RowNum = 1 现在的问题是子表数据可能关联补上 tableA 中关联不到 tableB 的数据 都 弄到一个分区了。这样逻辑就不对了 |
4
liprais 2022-10-06 12:34:10 +08:00
@coderstory 你用了 left join 之后关联不上的你准备怎么处理?
|
5
coderstory OP @liprais 没办法 换了一个 分组字段
|