2016-04-28 23 views
0

ich habe folgende Datensätze, bei denen verschiedene Personen den gleichen Namen haben:Wählen Sie Datensätze verschiedene in einer Spalte in Postgresql Datenbank

id name category_id birthdate family_id 
1 joe 2    2014-05-01 1 
2 jack 3    2013-04-01 2 
3 joe 2    1964-05-01 1 
4 jack 5    1982-05-01 2 
5 emma 1    2014-05-01 1 
6 joe 3    2003-07-06 3 

Jetzt brauche ich eine Abfrage, die zu folgenden Ergebnissen. Ich möchte nur jeden Namen einmal pro family_id. Ich brauche alle Werte jedes Datensatzes einschließlich der ID. Für den Fall, dass der Tisch weitere Reihen entlang der Straße bekommt, brauche ich sie auch. Das Ergebnis sollte also alle Werte enthalten.

id name category_id birthdate family_id 
1 joe 2    2014-05-01 1 
2 jack 3    2013-04-01 2 
5 emma 1    2014-05-01 1 
6 joe 3    2003-07-06 3 

Ich versuchte es mit mehreren Ansätzen (GROUP BY, DISTINCT, DISTINCT ON etc.), aber keiner war für mich die Arbeit aus. Wenn ich eine GROUP BY-Klausel verwende (GROUP BY name) bekomme ich eine ERROR: column "deals.id" must appear in the GROUP BY clause or be used in an aggregate function. Aber wenn ich id innerhalb der Klausel setze, bekomme ich alle Aufzeichnungen zurück.

Gleich mit distinct. Dort muss ich alle Felder auswählen, auf denen die Ergebnismenge eindeutig sein soll. Aber ich brauche alle Werte des Datensatzes. Und wegen der primären ist jeder Datensatz eindeutig, wenn ich die ID einschließe.

Ich versuchte es mit einer Unterklausel, die alle eindeutigen Namen gefiltert hat. Ich habe sie in einer where-Klausel verwendet. Aber ich habe alle Werte zurück einschließlich (natürlich) den nicht eindeutigen Namen/family_id records.

Hat jemand eine helfende Hand für mich?

+1

"* keine funktionierte für mich *" ist keine akzeptable Problembeschreibung. Zeigen Sie uns, was Sie versucht haben und die Fehler, die Sie bekommen. –

+1

Sie müssen beschreiben, wie dieser einzelne Name einmal pro family_id ausgewählt wird. – jarlh

+0

@a_horse_with_no_name können Sie mir sagen, wie kann ich eine Tabelle in Stack-Überlauf setzen? Ich habe es mit Markdown versucht, mit einer HTML-Tabelle und mit einer einfachen Texttabelle (http://www.sensefulsolutions.com/2010/10/format-text-as-table.html). Keine funktioniert. Also dachte ich, das ist besser als nichts. – coderuby

Antwort

1

Sie könnten nicht alle Felder in Ihrer Gruppe angeben, und wenn Sie die ID angeben, würde dies die Zeilen eindeutig machen.

Probieren Sie etwas wie:

SELECT 
    name, category_id, birthdate, family_id 
FROM family 
GROUP BY 
    name, category_id, birthdate, family_id; 
+0

Das selbe wie 'SELECT DISTINCT', löst das Problem von OP nicht. (Alle Geburtsdaten sind einzigartig.) – jarlh

+0

Aber coderuby will die ID-Spalte in der Ausgabe –

+0

@a_horse_with_no_name, welche ID würde er dann mögen? Weil es bei jeder Ausführung der Abfrage variieren kann, je nachdem, wie die DBE Dinge auswertet. –

0

Es funktionierte mit DISTINCT ON.

Die folgende funktionierte gut:

SELECT DISTINCT ON (table.name, table.family_id) table.* FROM table; 

Das einzige, was ich die Bestellung zu überprüfen ist. Aber ich wollte meine Lösung bisher teilen.

Verwandte Themen