所以我正在开发这个应用程序,我们有供应商,每个供应商都有很多分数,每个分数都有详细信息。输入供应商分数的方法有两种,一种是通过表格,另一种是excel上传。现在我们有一些人通过电子表格上传,更新单个供应商,然后上传整个列表,这会为她的所有供应商创建重复项。
我写了这个sql语句。注意:使分数独一无二的是 1. 它的 ID 和 2. valid_from 和 valid_until 日期的组合。
def remove_old_duplicates
remove_dup = "DELETE s1 FROM `sms_development`.`scores` s1, `sms_development`.`scores` s2 WHERE s1.supplier_id = s2.supplier_id AND s1.valid_from = s2.valid_from AND s1.valid_until = s2.valid_until AND s1.id < s2.id;"
ActiveRecord::Base.connection.execute remove_dup
end
基本上,这应该做的是获取表格并将其与自身组合,然后查找供应商相同以及 valid_from 和 valid_until 属性相同的所有分数。然后它会查找 ID 号最大的那个并删除其余的。唯一的事情是它没有删除它们。我在工作台上运行查询,它说它工作正常,只是不在应用程序中。我在导入新数据后运行此查询?关于可能导致这种情况的任何想法?
注意:我基于 ID 号而不是 created_at 属性的原因是,如果我在字段中创建分数,rails 会为我提供 created_at 属性,excel 上传使用 sql 插入,因此无法获取该属性,因为id 是唯一的,我认为 ID 越大,记录越新