Чи є спосіб імітувати rownum у postgresql?
Відповіді:
Postgresql> 8.4
SELECT
row_number() OVER (ORDER BY col1) AS i,
e.col1,
e.col2,
...
FROM ...
Я щойно протестував у Postgres 9.1 рішення, близьке до Oracle ROWNUM:
select row_number() over() as id, t.*
from information_schema.tables t;
ORDER BY
зовнішнього запиту.
Якщо ви просто хочете, щоб номер повернувся, спробуйте це.
create temp sequence temp_seq;
SELECT inline_v1.ROWNUM,inline_v1.c1
FROM
(
select nextval('temp_seq') as ROWNUM, c1
from sometable
)inline_v1;
Ви можете додати замовлення до inline_v1 SQL, щоб ваш ROWNUM мав послідовне значення для ваших даних.
select nextval('temp_seq') as ROWNUM, c1
from sometable
ORDER BY c1 desc;
Можливо, це не найшвидший, але це варіант, якщо вони вам дійсно потрібні.
Postgresql не має еквівалента ROWNUM від Oracle. У багатьох випадках ви можете досягти того самого результату, використовуючи LIMIT та OFFSET у своєму запиті.
Якщо у вас є унікальний ключ, ви можете використовувати його 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 |
використовуйте обмежувальну клаузулу зі зміщенням, щоб вибрати номер рядка -1, тому, якщо ви хочете отримати рядок номер 8, використовуйте:
обмеження 1 зміщення 7