私は6,500万行と140個強のテーブルを持っています。データはいくつかの情報源から得られ、少なくとも毎月提出されます。いくつかのフィールドがNULLである多くのフィールドで異なる情報を取得します。
私は、このデータから特定のフィールドを一意に特定するだけの簡単な方法を探します。つまり、どの請求書をどの識別番号で送信したのか、誰によって送信されたのかをリンクするためのすべての情報を処理したいのです。問題は、私は6500万以上のレコードを反復したくないということです。私が別個の価値を得ることができれば、私は6500万人ではなく500万人のレコードを処理するだけで済むでしょう。データの説明はSQL Fiddle、サンプルは
invoice_number
を毎月passport_number_1, national_identity_number_1 and driving_license_1
にリンクして送信すると、これが表示されるのは1行だけです。彼らはnational_identity
フィールドが故に全く新しいですので、passport_number_1, national_identity_number_2 and driving_license_1
にリンクされて、私もこの行を選択したいinvoice_number
送っ31月に、その後30ヶ月間以上を提出する場合、すなわち4つのフィールドは
一意であることが持っています行は、私は、彼らが一点で発生するヌルを持っているために、その可能性のすべてのフィールドについては、同じ行
linked to
ことで
- ユニークです。
- 'ピボット/コンポジット'列はinvoice_numberで、 submitted_byです。それらのいずれかが存在しない場合は、その行を削除してください
- また、上記のデータとともにdatabase_idを含める必要があります。すなわち postgresqlデータベースによって自動生成されるprimary_id
- 返される必要のないフィールドは、
other_column
およびyet_another_column
です。テーブルを覚えておいてください140列はので、このユニークな 記録
は、シナリオを再現しようとする試みのために、このSQL fiddleを参照してください保持する新しいテーブルを作成し、それらを結果と
そのフィドルから、私のような結果を期待したい:
- 行1を、2 &行11:彼らは正確に 同じようにそれらの1つだけ保存しなければなりません。好ましくは、最小値が
id
の行。 - 行4と行9:それらのうちの1つは、正確には であるため、削除されます。
- 行5,7、& 8:
invoice_number
またはsubmitted_by
のいずれかが欠落しているため、削除されます。 - 結果はRow(1,2、または11)、3、(4または9)、6および10になります。
期待される結果がどういうものか分かりません。 4つのフィールドが同じで、他のフィールドも取得したいセットから1行だけを必要としているとします。あなたは何行目か気にしないなら、なぜその列の 'id'は重要なのでしょうか? – binoternary
「彼らのうちの1人は落ちるだろう」は、「彼らのうちの1人だけが保管される」とすべきである。どちらが重要か? –
@ErwinBrandstetter訂正していただきありがとうございます。あなたに答えるために、いいえ、どれを保つかは関係ありません。好ましくは、最初に現れるものを保持したいと思っています。 – lukik