SQL查询如何获取完整订单号分组数据 避免截断同订单剩余记录
不拆分同订单数据的分页查询实现方案
核心逻辑是先定位分页边界对应的分组阈值,再查询所有小于该阈值的完整分组数据,不会截断同一订单的记录。
- 第一步:先查询你原定分页边界对应的订单号,你原本要取前10条,执行以下SQL拿到边界订单号:
SELECT DISTINCT 订单号 FROM 你的表名 ORDER BY 订单号 ASC LIMIT 1 OFFSET 9;
查询结果为ORDER103,也就是你本次分页不能包含的最小订单号。
- 第二步:执行本次分页的查询语句,返回所有小于边界订单号的完整记录:
SELECT * FROM 你的表名 WHERE 订单号 < 'ORDER103' ORDER BY 订单号 ASC;
执行后返回的就是ORDER101、ORDER102两个订单的全部完整数据,不会包含ORDER103的任何记录。
- 下一次分页操作:将本次拿到的边界订单号
ORDER103作为游标,重复上述逻辑即可,以此类推所有分页都不会出现同一订单数据被拆分到两次请求的问题。
如果你的排序规则不是按订单号升序,而是按创建时间等其他字段排序,只需要把第一步的ORDER BY条件调整为和你业务一致的排序规则即可,核心逻辑保持不变。
内容的提问来源于stack exchange,提问作者DigitalInsanity
相关产品推荐
相关产品推荐

