You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Active Record Query过滤PurchaseOrder表中的重复记录?

解决PurchaseOrder表重复记录过滤问题

方案1:通用去重(保留每组重复记录中ID最小的条目)

针对description和order_number同时重复的记录,要保留每组里ID最小的条目,可用以下查询:

# 获取每组重复记录中最小的ID
valid_ids = PurchaseOrder.where(job_number: "348282227")
                         .group(:description, :order_number)
                         .pluck('MIN(id)')

# 查询去重后的结果
PurchaseOrder.where(id: valid_ids)
             .select(:job_number, :description, :order_number)

这个方法通过group(:description, :order_number)将相同描述和订单号的记录归为一组,再用MIN(id)筛选出每组里最早创建的记录(通常ID更小),最后根据这些ID就能得到不含重复的结果,自动排除了像6686这种ID更大的重复行。

方案2:直接排除指定ID的记录

如果已经明确知道要排除的具体ID(比如6686),可以直接在查询中过滤:

PurchaseOrder.where(job_number: "348282227")
             .where.not(id: 6686)
             .select(:job_number, :description, :order_number)

这种方式操作简单,但只适用于已知具体要排除的ID的场景,后续如果出现新的重复记录,需要手动更新排除的ID列表,通用性不如方案1。

原查询无效的原因

你之前的代码仅对order_number做了去重,但没有考虑description的重复情况,而且即使拿到了唯一的order_number列表,查询时还是会返回所有对应该order_number的记录,因此无法实现去重需求。

内容的提问来源于stack exchange,提问作者SkRoR

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 13:54:59