row_number postgres over example postgresql rownum

postgresql - over - rownum postgres



Rownum en postgresql (7)

Acabo de probar en Postgres 9.1 una solución cercana a Oracle ROWNUM:

select row_number() over() as id, t.* from information_schema.tables t;

¿Hay alguna forma de simular rownum en postgresql?


Postgresql no tiene un equivalente de ROWNUM de Oracle. En muchos casos, puede lograr el mismo resultado utilizando LIMIT y OFFSET en su consulta.


Postgresql tiene límite.

Código de Oracle:

select * from tbl where rownum <= 1000;

lo mismo en el código de Postgresql:

select * from tbl limit 1000


Postgresql> 8.4

SELECT row_number() OVER (ORDER BY col1) AS i, e.col1, e.col2, ... FROM ...


Si solo quieres que un número vuelva, intenta esto.

create temp sequence temp_seq; SELECT inline_v1.ROWNUM,inline_v1.c1 FROM ( select nextval(''temp_seq'') as ROWNUM, c1 from sometable )inline_v1;

Puede agregar un pedido al SQL inline_v1 para que su ROWNUM tenga algún significado secuencial para sus datos.

select nextval(''temp_seq'') as ROWNUM, c1 from sometable ORDER BY c1 desc;

Puede que no sea el más rápido, pero es una opción si realmente los necesitas.


Si tiene una clave única, puede usar COUNT(*) OVER ( ORDER BY unique_key ) as ROWNUM

SELECT t.*, count(*) OVER (ORDER BY k ) ROWNUM FROM yourtable t; | k | n | rownum | |---|-------|--------| | a | TEST1 | 1 | | b | TEST2 | 2 | | c | TEST2 | 3 | | d | TEST4 | 4 |

DEMO


Usa el límite de clausura, con el desplazamiento para elegir el número de fila -1, así que si quieres obtener la fila número 8, usa:

límite 1 desplazamiento 7