SQLite中获取指定group_id前后10个唯一group_id的问题排查
解决方案:SQLite获取指定group_id前后的distinct group_id
1. 修正repeats取值错误
主函数中repeats的取值需从random.randint(0,5)改为random.randint(1,5),避免生成0次重复导致数据逻辑异常,这可能是现有方法返回不符合预期的诱因之一。
2. 纯SQL实现get_previous_page_of_group_ids
假设你的表名为your_table,存储group_id的字段为group_id,以下SQL可直接获取指定group_id之前(排序上更靠前)的10个唯一group_id:
SELECT DISTINCT group_id FROM your_table WHERE group_id < ? -- ?为传入的目标group_id参数 ORDER BY group_id DESC LIMIT 10;
如果group_id是字符串类型,或需要按关联时间排序(比如取每个group_id最新记录的时间排序),可调整为:
SELECT DISTINCT t.group_id FROM your_table t JOIN ( SELECT group_id, MAX(create_time) AS latest_time FROM your_table GROUP BY group_id ) gt ON t.group_id = gt.group_id WHERE gt.group_id < ? ORDER BY gt.latest_time DESC LIMIT 10;
3. 补充:获取后续10个distinct group_id的SQL
对应实现get_next_page_of_group_ids的纯SQL写法:
SELECT DISTINCT group_id FROM your_table WHERE group_id > ? -- ?为传入的目标group_id参数 ORDER BY group_id ASC LIMIT 10;
4. 现有方法不符合预期的排查方向
- 未正确处理去重:原有方法可能未先执行
DISTINCT就分页,导致返回重复group_id或分页逻辑混乱 - 排序方向错误:获取前序group_id需按降序取前10(确保拿到最接近目标的10个),后续则按升序取前10
- 未过滤已删除数据:删除数据后,若原有方法未排除已删除记录(如无
is_deleted = 0这类过滤条件),会导致结果包含无效数据
内容的提问来源于stack exchange,提问作者Sun Bear
相关产品推荐
相关产品推荐

