Wählen Sie die Spalten, indem Sie Spalte mehrere Spalten in SQL
Stellen Sie sich folgende beispielhafte Tabelle:
time name value1 value2
12:00 Hans 2 4
12:30 Hans 2 4
13:00 Hans 3 5
14:00 Peter 4 4
15:00 Peter 4 4
Ich möchte die filter von maximal Zeitstempel und Namen.
Bedeutung ich will
13:00 Hans 3 5
15:00 Peter 4 4
Mit: select max(Zeit),name,Wert1,Wert2 from Tabelle group by name
funktioniert nicht. Es sagt mir, dass die Verwendung einer Aggregatfunktion oder die group by auf Wert1 und Wert2 auch.
Wenn ich group by name, Wert1 und Wert2 dann bekomme ich das folgende Ergebnis, da value1 und value2 unterschiedlich sind für zwei Reihen von Hans:
12:30 Hans 2 4
13:00 Hans 3 5
15:00 Peter 4 4
Was ist die Lösung?
BEARBEITEN:
Es ist ein PostgreSQL.
Bitte geben Sie das RDBMS, das Sie ansprechen, indem Sie den entsprechenden tag (Oracle, SQL Server, MySQL, etc.). Möglicherweise gibt es Antworten, die die Vorteile von Sprache oder Produkt-features, die nicht universell unterstützt. Auch, durch tagging Sie mit einem bestimmten RDBMS, Ihre Frage kann erhalten Aufmerksamkeit von Menschen, die besser geeignet, Sie zu beantworten.
vielen Dank für diesen Hinweis.
Name des RDBMS ist
vielen Dank für diesen Hinweis.
Name des RDBMS ist
PostgreSQL
oder eine kürzere Postgres
.InformationsquelleAutor Vladimir S. | 2013-03-11
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie eine Unterabfrage verwenden, um die
max(time)
für jedenname
und dann kommen Sie zurück zu Ihrem Tisch, um das endgültige Ergebnis:Je nach Datenbank, die Sie verwenden, wenn Sie anwenden können, eine windowing-Funktion wie
row_number()
oderrank()
dann deine Abfrage würde etwa wie folgt aus:Sehen SQL Fiddle mit Demo der beiden Abfragen
Sie sind willkommen, gerne zur Verfügung!
InformationsquelleAutor Taryn
Mit
distinct on
es ist ganz einfach. SQL FiddleInformationsquelleAutor Clodoaldo Neto