Usando rownum no Oracle Instrução SQL em combinação com a cláusula order by
Qual das duas instruções SQL a seguir retornará o conjunto de resultados desejado? (isto é, as dez linhas com Status = 0 e os mais altos StartTimes)?
Ambas as declarações sempre retornarão o mesmo conjunto de resultados (StartTime é único)?
SELECT *
FROM MyTable
WHERE Status=0
AND ROWNUM <= 10
ORDER BY StartTime DESC
SELECT *
FROM (
SELECT *
FROM MyTable
WHERE Status=0
ORDER BY StartTime DESC
)
WHERE ROWNUM <= 10
fundo
Meu DBAdmin me disse que a primeira declaração seráprimeiro limite a tabela a 10 linhas e depois ordene aquelas linhas aleatórias por StartTime, o que definitivamente não é o que eu quero. Pelo que aprendi emessa resposta, a cláusula order by da segunda instrução é redundante e pode ser removida por um otimizador, que também não é o que eu quero.
Eu pedi umpergunta semelhante concerindo olimit
cláusula em uma consulta a um banco de dados SQLite e estou interessado em entender quaisquer diferenças para as declarações acima (usandolimit
Vsrownum
) usado com um oracle db.