Псевдоним для OFFSET PostgreSQL - PullRequest
0 голосов
/ 15 мая 2018

У меня есть следующая таблица.Мне нужно получить ROW_NUMBER для 'pk_ia = 3' и 'pk_ib = 1' и указать это как смещение, чтобы получить строки 'c' и 'd'.

Table: items
|pk_ia|pk_ib|data|
|1    |1    |a   |
|2    |1    |b   |
|3    |1    |c   |
|4    |1    |d   |

Чтобы получитьrow_number, я пытаюсь дать псевдоним для смещения, например OFFSET some_alias.Я получаю следующую ошибку:

ERROR:  column "o" does not exist
LINE 1: ...-1) AS o from tblitem ORDER BY pk_iPlu ASC OFFSET o LIMIT 10...
                                                             ^
********** Error **********

ERROR: column "o" does not exist
SQL state: 42703
Character: 266

Мой запрос:

 SELECT pk_ia, (SELECT row FROM (SELECT pk_ia, ROW_NUMBER () OVER (ORDER BY pk_ia) AS row 
 FROM items where pk_ib=1) AS row_number 
 where pk_ia=(select min(pk_ia) from items where pk_ia >= 3)-1) 
 AS o from items where pk_ib=1 ORDER BY pk_ia ASC OFFSET o LIMIT 10;

Ожидается: я хочу что-то вместе со смещением 3. т. Е. 2 ​​

 Table: items
|pk_ia|offset|
|3    |2    |
|4    |2    |

ПРИМЕЧАНИЕ. Чтобы получить следующую ближайшую запись, если запрошенная переменная pk_ia отсутствует, я использовал

 pk_ia=(select min(pk_ia) from tblitem where pk_ia >= 3)

Хотя для следующих выборок требуется результат, но здесь смещение дается как 2, что не предназначено,

 SELECT pk_ia, (SELECT row FROM (SELECT pk_ia, ROW_NUMBER () OVER (ORDER BY pk_ia) AS row 
 FROM items where pk_ib=1) AS row_number 
 where pk_ia=(select min(pk_ia) from items where pk_ia >= 3)-1) 
 AS o from items where pk_ib=1 ORDER BY pk_ia ASC OFFSET 2 LIMIT 10;

Результаты:

   Table: items
    |pk_ia|offset|
    |3    |2    |
    |4    |2    |

Как получить это с помощью псевдонима?

1 Ответ

0 голосов
/ 15 мая 2018

Я предполагаю, что вы пытаетесь сделать:

so=# with c as (SELECT *, ROW_NUMBER () OVER (partition by pk_ib ORDER BY pk_ib) AS row
 FROM items
where pk_ib = 1 and pk_ia >=3)
so-# select pk_ia, max(row) over() from c;
 pk_ia | max
-------+-----
     3 |   2
     4 |   2
(2 rows)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...