だから私はこのアプリに取り組んでいます。サプライヤーがあり、各サプライヤーには多くのスコアがあり、各スコアには詳細があります。サプライヤーのスコアを入力する方法は 2 つあります。1 つはフォームによるもので、もう 1 つは 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 番号を持つものを探し、残りを削除します。唯一のことは、それらを削除しないことです。ワークベンチでクエリを実行すると、アプリではなく正常に機能していると表示されます。新しいデータがインポートされた直後にこのクエリを実行しますか? これを引き起こしている可能性のあるアイデアはありますか?
注:created_at属性ではなくID番号に基づいている理由は、フィールド内でスコアを作成するとRailsがcreated_at属性を提供するためです。ExcelアップロードはSQL挿入を使用するため、その属性を取得しないためです。 ID は一意です。ID が大きいほどレコードが新しいと考えました