Wählen Sie alle Zeilen mit doppelten Werten in zwei Spalten von innerhalb von verschiedenen Gruppen von verwandten Datensätzen

Ich versuche, erstellen Sie eine MySQL-Abfrage, die zurückkehren wird, werden alle einzelnen Zeilen (nicht gruppiert), die doppelte Werte aus, die innerhalb einer Gruppe von bezugsdatensätzen. Von 'Gruppen von verwandten Datensätzen" meine ich, dass diejenigen, die mit dem gleichen Konto-Nummer (pro Beispiel unten).

Grundsätzlich innerhalb jeder Gruppe von verwandten Datensätzen, die denselben eindeutigen Kontonummer, wählen Sie nur die Zeilen, deren Werte für die date oder amount Spalten sind die gleichen wie die anderen Zeile die Werte innerhalb des Kontos Gruppe von Datensätzen. Werte sollten nur doppelte betrachtet werden, die in diesem Konto der Gruppe. Die Beispieltabelle und ideale Ausgangs details siehe unten sollten die Sache aufzuklären.

Auch, ich bin nicht besorgt, mit der alle Datensätze mit status " X zurückgegeben werden, auch wenn Sie doppelte Werte.

Kleine Beispiel-Tabelle mit den relevanten Daten:

id   account   invoice   date         amount   status
1    1         1         2012-04-01   0        X
2    1         2         2012-04-01   120      P
3    1         2         2012-05-01   120      U
4    1         3         2012-05-01   117      U
5    2         4         2012-04-01   82       X
6    2         4         2012-05-01   82       U
7    2         5         2012-03-01   81       P
8    2         6         2012-05-01   80       U
9    3         7         2012-03-01   80       P
10   3         8         2012-04-01   79       U
11   3         9         2012-04-01   78       U

Ideal Ausgabe zurückgegeben von der gewünschten SQL-Abfrage:

id   account   invoice   date         amount   status
2    1         2         2012-04-01   120      P
3    1         2         2012-05-01   120      U
4    1         3         2012-05-01   117      U
6    2         4         2012-05-01   82       U
8    2         6         2012-05-01   80       U
10   3         8         2012-04-01   79       U
11   3         9         2012-04-01   78       U

So, Zeile 7/9 und 8/9, sollten Sie nicht beide zurückgegeben werden, weil Ihre doppelte Werte werden nicht als Duplikate von im Rahmen der jeweiligen Konten. Jedoch, Zeile 8 sollte zurückgenommen werden, denn es teilt sich einen doppelten Wert mit Zeile 6.

Später, kann ich weiter Feilen Sie die Auswahl, indem Sie nur doppelte Zeilen, die übereinstimmende Zustände, also die Zeile 2 wäre ausgeschlossen, weil es nicht mit den anderen zwei gefunden innerhalb des Kontos Gruppe von Datensätzen. Wie viel schwieriger würde das für die Abfrage? Wäre es nur eine Frage der hinzufügen einer WHERE-oder HAVING-Klausel, oder ist es komplizierter?

Ich hoffe, meine Erklärung, was ich bin versucht zu erreichen, macht Sinn. Ich habe versucht, mit INNER JOIN, aber das gibt jeden die gewünschte Zeile mehr als einmal. Ich will keine Duplikate von Duplikaten.

Tabellenstruktur und Beispiel-Werte:

CREATE TABLE payment (
  id int(11) NOT NULL auto_increment,
  account int(10) NOT NULL default '0',
  invoice int(10) NOT NULL default '0',
  date date NOT NULL default '0000-00-00',
  amount int(10) NOT NULL default '0',
  status char(1) NOT NULL default '',
  PRIMARY KEY  (id)
);

INSERT INTO payment VALUES (1, 1, 1, '2012-04-01', 0, 'X'); 
INSERT INTO payment VALUES (2, 1, 2, '2012-04-01', 120, 'P'); 
INSERT INTO payment VALUES (3, 1, 2, '2012-05-01', 120, 'U'); 
INSERT INTO payment VALUES (4, 1, 3, '2012-05-01', 117, 'U'); 
INSERT INTO payment VALUES (5, 2, 4, '2012-04-01', 82, 'X'); 
INSERT INTO payment VALUES (6, 2, 4, '2012-05-01', 82, 'U'); 
INSERT INTO payment VALUES (7, 2, 5, '2012-03-01', 81, 'p'); 
INSERT INTO payment VALUES (8, 2, 6, '2012-05-01', 80, 'U'); 
INSERT INTO payment VALUES (9, 3, 7, '2012-03-01', 80, 'U'); 
INSERT INTO payment VALUES (10, 3, 8, '2012-04-01', 79, 'U'); 
INSERT INTO payment VALUES (11, 3, 9, '2012-04-01', 78, 'U');
kannst du deine sql-Tabelle Struktur
Klar doch, boss. Oben Hinzugefügt! Auch Hinzugefügt die sample-Werte darunter. 🙂
Warum nicht die Reihe der id 1 in der Ausgabe enthalten? Ihr Datum mit einem anderen Datum innerhalb Ihrer account-Gruppe.
Und warum nicht 7/9 8/9? Sie sind in der diff-Konten...
Ich denke, es ist eine WHERE status != 'X'

InformationsquelleAutor purefusion | 2012-05-03

Schreibe einen Kommentar