2017-09-22 2 views
1

ことなく、複数の行を選択:このようなテーブルがあり、重複

+---------+--------+--------+ 
| id  | prefix | number | 
+---------+--------+--------+ 
| 2528361 | 100#11 | 4444 | 
| 2528364 | 100#13 | 4444 | 
| 2528362 | 100#12 | 2222 | 
| 2528363 | 100#12 | 3333 | 
+---------+--------+--------+ 

クエリである「IDを選択し、接頭辞、(SOME_AND_OR)番号」

私は重複したエントリでこれらのフィールドを削除する必要がありますが、接頭辞OR番号は次のようになります。

+---------+--------+--------+ 
| id  | prefix | number | 
+---------+--------+--------+ 
| 2528361 | 100#11 | 4444 | 
| 2528362 | 100#12 | 2222 | 
+---------+--------+--------+ 

あなたが私を助けることができれば大いに感謝します。

+0

'GROUP BY' – rtfm

+0

例えば、どうなるのグループ3つのレコードは接頭辞と番号の両方に重なっています –

+0

GROUPは単一のフィールドでそのフィールドの複製を削除し、複数のフィールドでこれらのフィールドの組み合わせをチェックします。各フィールドで区別したい –

答えて

1

私たちは二重集約を試みることができます.1つはプレフィックス内の重複を削除し、もう1つは番号内​​の重複を削除します。まず、別のビューに接頭辞の集約を行います。

CREATE VIEW yourView AS 
SELECT p1.* 
FROM yourTable p1 
INNER JOIN 
(
    SELECT prefix, MIN(number) AS min_number 
    FROM yourTable 
    GROUP BY prefix 
) p2 
    ON p1.prefix = p2.prefix AND p1.number = p2.min_number 

をその後、数の上に第2の集約を行います。レコードのグループが、言うならば、このロジックは失敗する可能性があり

SELECT v1.* 
FROM yourView v1 
INNER JOIN 
(
    SELECT number, MIN(prefix) AS min_prefix 
    FROM yourView 
    GROUP BY number 
) v2 
    ON v1.number = v2.number AND v1.prefix = v2.min_prefix 

に留意されたいです。 3以上で、数字と接頭辞が重複しています。この場合、上記のクエリによって一部の情報が失われる可能性があります。しかし、私はまだこれを潜在的な答えとして提供しています。これは、サンプルデータがこれが起こることを意味しないためです。

出力:ここ

enter image description here

デモ:あなたはそれwithaを行うことができます

Rextester

関連する問題