2017-09-22 1 views
1

Es gibt eine Tabelle wie folgt lautet:ohne mehrreihige Wählen Sie doppelte

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

Die Abfrage ist „SELECT id, Präfix, Zahl WHERE (SOME_AND_OR)“

ich die Felder mit doppelten Einträgen entfernen müssen auf Präfix ODER Nummer wie folgt:

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

wäre sehr zu schätzen, wenn Sie mir helfen können.

+0

Sie, dass miteinem tun können 'GROUP BY' – rtfm

+0

Was passiert, wenn zum Beispiel eine Gruppe von drei Datensätze überlappen sowohl Präfix als auch Nummer? –

+0

GROUP von einem einzigen Feld entfernt die Duplikate in diesem Feld und auf mehreren Feldern wird die Kombination dieser Felder überprüfen, die ich für jedes Feld unterscheiden möchte –

Antwort

1

Wir können versuchen, eine doppelte Aggregation zu machen, eine, um Duplikate im Präfix zu entfernen, und die andere, um Duplikate in der Zahl zu entfernen. Zuerst wird auf dem Präfix in einer separaten Ansicht, die Aggregation tun:

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 

Dann tun die zweite Aggregation auf der Nummer:

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 

Beachten Sie, dass diese Logik fehlschlagen, wenn eine Gruppe von Datensätzen, sagen 3 oder mehr, haben überlappende Nummern und Präfixe. In diesem Fall können einige Informationen durch die obige Abfrage verloren gehen. Aber ich biete das immer noch als eine mögliche Antwort, weil Ihre Beispieldaten nicht implizieren, dass dies geschieht.

Ausgang:

enter image description here

Demo hier:

Rextester

Verwandte Themen