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 |
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