2016-05-05 6 views
0

In Postgres tun, da die folgenden Daten:Aufrechterhaltung der Ordnung während verschiedene

-[ RECORD 1 ]- 
id  | 57425 
filter | 1 
-[ RECORD 2 ]- 
id  | 57416 
filter | 1 
-[ RECORD 3 ]- 
id  | 57426 
filter | 1 
-[ RECORD 4 ]- 
id  | 57416 
filter | 2 
-[ RECORD 5 ]- 
id  | 57424 
filter | 2 
-[ RECORD 6 ]- 
id  | 57425 
filter | 2 
-[ RECORD 7 ]- 
id  | 57427 
filter | 2 

Was die SQL für die Erstellung der folgenden (Entfernen von duplizierten) ist. Es ist mir egal, ob es genau die gleiche Reihenfolge ist, ich möchte nur Datensätze mit dem Filterwert '1' vor den Datensätzen mit dem Filterwert '2' anzeigen.

-[ RECORD 1 ]- 
id  | 57425 
filter | 1 
-[ RECORD 2 ]- 
id  | 57416 
filter | 1 
-[ RECORD 3 ]- 
id  | 57426 
filter | 1 
-[ RECORD 4 ]- 
id  | 57424 
filter | 2 
-[ RECORD 5 ]- 
id  | 57427 
filter | 2 
+0

posten Sie bitte Ihre Anfrage. –

+0

Also wollen Sie den 'MIN()' Filterwert, wenn 'GROUP' durch' id'? –

+0

Ich möchte die doppelten Werte herausfiltern, aber die Datensätze mit dem Filter auf 1 über Datensätze mit Filter auf 2 gesetzt halten. –

Antwort

2

Wie ich in einem Kommentar vorgeschlagen, scheint dies wie eine einfache Gruppierung/Bestell Problem:

SELECT id,MIN(filter) as lowFilter 
FROM UnnamedTable 
GROUP BY id 
ORDER BY lowFilter 

Sobald Sie sich selbst finden zu sagen " Ich möchte deutlich auf einige der Spalten ... tun "oder" Ich möchte klar zu tun aber auch zusätzliche Spalten ", sollten Sie erkennen, dass das, was Sie tatsächlich suchen, nicht DISTINCT, sondern GROUP BY ist. Es liegt dann an Ihnen, korrekt zu formulieren, welche Aggregate auf die zusätzlichen Spalten angewendet werden sollen, wenn man berücksichtigt, dass mehrere Werte (aus mehreren Zeilen) zur Auswahl stehen.

0
Select ID, min(filter) from my_table group by id order by 2 

Oder

Select distinct t1.id, (select min(filter) from my_table t2 where t2.id = t1.ID) from my_table t1 order by 2 
Verwandte Themen