Подразумевает ли разделение на / order под заказ в запросе? - PullRequest
0 голосов
/ 27 октября 2018

Я не вижу разницы в:

select
  ID,
  TYPE,
  XTIME,
  first_value(XTIME) over (partition by TYPE order by XTIME)
from SERIES;

и:

select
  ID,
  TYPE,
  XTIME,
  first_value(XTIME) over (partition by TYPE order by XTIME)
from SERIES
order by TYPE, XTIME;

Подразумевает ли разделение / упорядочение под порядком в запросе?

Ответы [ 2 ]

0 голосов
/ 27 октября 2018

Нет, это не так.

Результирующий набор из запроса упорядочивается только в том случае, если в нем есть явное предложение order by. В противном случае результирующий набор имеет порядок произвольный . Часто базовые алгоритмы, используемые для выполнения запроса, определяют порядок результирующего набора.

Вы можете зависеть от окончательного порядка только в том случае, если у вас есть предложение order by для самого внешнего select. То, что наборы результатов находятся в одном и том же порядке, является просто совпадением.

Мне любопытно, почему вы просто не используете это?

min(xtime) over (partition by type)
0 голосов
/ 27 октября 2018

Разница между этими двумя запросами заключается в том, что второй будет упорядочен по возрастанию на TYPE, а затем XTIME, тогда как первый теоретически будет иметь случайный порядок.

PARTITION BY и ORDER BY предложения, используемые в вызове FIRST_VALUE, влияют на эту конкретную аналитическую функцию, но сами по себе не влияют на конечный порядок набора результатов.

InВообще, если вы хотите упорядочить набор результатов в SQL, вам нужно использовать предложение ORDER BY.Если оба ваших запроса оказываются имеют одинаковый порядок в данный момент, это только случайно и не гарантируется.Как это могло случиться?Что ж, если Oracle выполняет итерацию кластеризованного индекса вашей таблицы, и этот порядок совпадений совпадает с ORDER BY TYPE, XTIME, то вы увидите этот порядок даже без , используя ORDER BY.

...