Ich muss die ersten N Zeilen für jede Gruppe nehmen, sortiert nach benutzerdefinierten Spalten.
Angesichts der folgenden Tabelle:
db=# SELECT * FROM xxx;
id | section_id | name
----+------------+------
1 | 1 | A
2 | 1 | B
3 | 1 | C
4 | 1 | D
5 | 2 | E
6 | 2 | F
7 | 3 | G
8 | 2 | H
(8 rows)
Ich benötige die ersten 2 Zeilen (sortiert nach Namen ) für jede section_id , dh ein Ergebnis ähnlich dem:
id | section_id | name
----+------------+------
1 | 1 | A
2 | 1 | B
5 | 2 | E
6 | 2 | F
7 | 3 | G
(5 rows)
Ich benutze PostgreSQL 8.3.5.
sql
postgresql
Kouber Saparev
quelle
quelle
group by
?Seit v9.3 können Sie eine seitliche Verbindung herstellen
Es könnte schneller sein, aber natürlich sollten Sie die Leistung speziell für Ihre Daten und Ihren Anwendungsfall testen.
quelle
t_inner.name
Spalten habendistinct
wird nicht benötigt. Ein Beispiel zeigt der vornehmste Link.distinct t_outer.section_id, t_top.*
Hier ist eine andere Lösung (PostgreSQL <= 8.3).
quelle
quelle
name
's undid
' s in derselben Reihenfolge sortiert, sodass du sie nicht siehst. Machen Sie die Namen in umgekehrter Reihenfolge und Sie werden sehen, dass diese Abfragen unterschiedliche Ergebnisse liefern.quelle