Saya perlu mengambil baris N pertama untuk setiap grup, dipesan dengan kolom khusus.
Diberikan tabel berikut:
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)
Saya memerlukan 2 baris pertama (dipesan dengan nama ) untuk setiap section_id , yaitu hasil yang mirip dengan:
id | section_id | name
----+------------+------
1 | 1 | A
2 | 1 | B
5 | 2 | E
6 | 2 | F
7 | 3 | G
(5 rows)
Saya menggunakan PostgreSQL 8.3.5.
sql
postgresql
Kouber Saparev
sumber
sumber
group by
?Sejak v9.3 Anda dapat melakukan join lateral
Ini mungkin akan lebih cepat tetapi, tentu saja, Anda harus menguji kinerja khusus pada data dan menggunakan kasus.
sumber
t_inner.name
kolomdistinct
ini tidak diperlukan. Contohnya ditunjukkan pada tautan poshest yang diposting.distinct t_outer.section_id, t_top.*
Ini solusi lain (PostgreSQL <= 8.3).
sumber
sumber
name
'danid
' diurutkan dalam urutan yang sama, sehingga Anda tidak akan melihatnya. Buat nama-nama dalam urutan terbalik dan Anda akan melihat bahwa kueri ini menghasilkan hasil yang berbeda.sumber