Eu tenho uma consulta escrita algo assim .....
with subquery as
(
SELECT A, B, C, D,
row_number() OVER(PARTITION BY X ORDER BY Y) as RN
FROM blah blah
ORDER BY A,B
LIMIT 100
)
SELECT C,D
FROM subquery
WHERE RN=1
Como você pode ver, a subconsulta é classificada, mas a consulta de nível superior não.
A consulta de nível superior não faz nada complicado, apenas seleciona com base na partição por cláusula.
A ordem de classificação da subconsulta será mantida nos resultados finais?
A observação dos vários conjuntos de dados com os quais testei indica que a ordem de classificação É mantida, mas não tenho certeza se isso é apenas uma coincidência de sorte ou não.
Não, a
order by
ou a subconsulta não influenciará a ordem do resultado externo.Se for o caso, pode ser influenciado pela
order by
função da janela.Mas você nunca pode confiar nisso.
Se você precisar de uma ordem específica para a consulta externa na qual possa confiar, também precisará usar um
order by
lá.Em suma, você não deve assumir que sim. O DBMS pode retornar sua subconsulta em uma ordem diferente sem violar nenhuma regra. Portanto, mesmo se você observar que a ordem é preservada para a versão X, isso pode mudar para a versão Y.
Sua consulta contém algumas complicações interessantes, onde os atributos de ordenação são removidos da consulta externa. Um bom otimizador pode se beneficiar dessas informações e retornar linhas em uma ordem diferente no nível mais externo.