SQL таблица представляет неупорядоченные наборы. Без явной сортировки строки расположены в произвольном порядке. Если ключи сортировки не уникальны, то связи располагаются в произвольном порядке.
Тогда вам не нужно повторять клавишу PARTITION BY
в ORDER BY
для оконных функций. Вы можете написать то, что хотите, в Oracle как:
select RANK() OVER (PARTITION BY EQUIP_UNIT_INIT_CODE ORDER BY ROWNUM)
from CAR_SEARCH_GTT;
Несмотря на rownum
, порядок будет произвольный . Oracle не дает никаких гарантий относительно порядка в каждой группе.
Единственный эффект rownum
состоит в том, чтобы иметь разные значения в каждой строке. Следовательно, нет никаких связей. Это более четко выражено с помощью ROW_NUMBER()
:
select ROW_NUMBER() OVER (PARTITION BY EQUIP_UNIT_INIT_CODE ORDER BY ROWNUM)
from CAR_SEARCH_GTT;
Oracle требует предложения ORDER BY
, поэтому все может go там.
В Postgres вы можете сделайте то же самое, удалив ORDER BY
- Postgres расширяет синтаксис ROW_NUMBER
. Таким образом, эквивалент:
select ROW_NUMBER() OVER (PARTITION BY EQUIP_UNIT_INIT_CODE)
from CAR_SEARCH_GTT;
В обоих случаях у вас может быть соответствующий ключ для упорядочивания - возможно, столбец идентификаторов или дата создания.