Preciso pegar as primeiras N linhas para cada grupo, ordenadas por coluna personalizada.
Dada a seguinte tabela:
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)
Preciso das 2 primeiras linhas (ordenadas por nome ) para cada section_id , ou seja, um resultado semelhante a:
id | section_id | name
----+------------+------
1 | 1 | A
2 | 1 | B
5 | 2 | E
6 | 2 | F
7 | 3 | G
(5 rows)
Estou usando o PostgreSQL 8.3.5.
sql
postgresql
Kouber Saparev
fonte
fonte
group by
?Desde a v9.3, você pode fazer uma junção lateral
Pode ser mais rápido , mas, é claro, você deve testar o desempenho especificamente em seus dados e caso de uso.
fonte
t_inner.name
colunadistinct
não é necessário. Um exemplo é mostrado no link posthest postado.distinct t_outer.section_id, t_top.*
Aqui está outra solução (PostgreSQL <= 8.3).
fonte
fonte
name
'eid
' são classificados na mesma ordem, para que você não o veja. Faça os nomes na ordem inversa e você verá que essas consultas geram resultados diferentes.fonte