Necesito tomar las primeras N filas para cada grupo, ordenadas por columna personalizada.
Dada la siguiente tabla:
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)
Necesito las primeras 2 filas (ordenadas por nombre ) para cada section_id , es decir, un resultado similar a:
id | section_id | name
----+------------+------
1 | 1 | A
2 | 1 | B
5 | 2 | E
6 | 2 | F
7 | 3 | G
(5 rows)
Estoy usando PostgreSQL 8.3.5.
sql
postgresql
Kouber Saparev
fuente
fuente
group by
?Desde la v9.3 puedes hacer una unión lateral
Se podría ser más rápido , pero, por supuesto, usted debe probar el rendimiento específicamente en sus datos y casos de uso.
fuente
t_inner.name
columnadistinct
no es necesario. Se muestra un ejemplo en el enlace publicado más recientemente.distinct t_outer.section_id, t_top.*
Aquí hay otra solución (PostgreSQL <= 8.3).
fuente
fuente
name
'syid
' se ordenan en el mismo orden, por lo que no lo verá. Haga los nombres en orden inverso y verá que estas consultas producen resultados diferentes.fuente