2017-01-22 3 views
0

EDIT hat: Ich bin mit PostgresSQLSQL eine deutliche Reihe basiert auf zwei Säulen auswählen, die min-Wert in dritte Spalte

Meine Abfrage alle eindeutigen Zeilen für die id-Spalte und der Spalte Typ zurückgeben muss. Wenn mehrere Zeilen mit derselben ID und demselben Typ vorhanden sind, wird die Zeile mit dem kleinsten Wert in der Zeitspalte zurückgegeben.

SELECT id, type, value FROM TableName 
GROUP BY MIN(time) 
ORDER BY id ASC, type ASC 

Das ist, was ich bisher habe, aber ich fühle mich wie ich GROUP BY falsch bin mit

+0

Bitte kennzeichnen Sie die von Ihnen verwendete Datenbank. –

+0

In einigen DBMS ist dieser Satz nicht korrekt. Bitte markieren Sie Ihre DBMS. – McNets

+0

Mein schlechtes. Ich habe das OP bearbeitet –

Antwort

0

Ich glaube, Sie ROW_NUMBER können mit der in jeder Kombination von id und geben Sie die Zeilen markieren kleinste Zeit mit rn = 1, dann WHERE Klausel, um die Tabelle zu filtern:

SELECT id, type, value FROM 
(SELECT id, type, value, 
ROW_NUMBER() OVER(PARTITION BY id, type ORDER BY time) AS rn 
FROM TableName) a 
WHERE rn = 1 
0

Postgres unterstützen distinct on. Dies ist normalerweise der effizienteste Weg, um das zu tun, was Sie wollen:

SELECT DISTINCT ON (id, type) id, type, value 
FROM TableName 
ORDER BY id, type, time ; 
Verwandte Themen