Использование rownum в SQL-выражении Oracle в сочетании с предложением order by

Which of the following two SQL statements will return the desired result set (т. е. десять строк с Status = 0 и самыми высокими значениями StartTimes)?

Will both statements always return the same result set (StartTime уникален)?

<code>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
</code>

Background

Мой DBAdmin сказал мне, что первое утверждение будетfirst ограничить таблицу до 10 строк, а затем упорядочить эти случайные строки по StartTime, что определенно не то, что я хочу. Из того, что я узнал вэтот ответусловие order by второго оператора является избыточным и может быть удалено оптимизатором, что тоже не то, что я хочу.

Я спросиланалогичный вопрос Принимаяlimit предложение в запросе к базе данных SQLite, и я заинтересован в понимании любых различий с вышеуказанными утверждениями (используяlimit Vsrownum) используется с оракулом дБ.

 nabulke03 мая 2012 г., 14:08
Извините за ошибки. Я исправил и проверил утверждение один против нашей базы данных. Второе утверждение должно быть синтаксически правильным.
 ypercubeᵀᴹ03 мая 2012 г., 14:16
 David Aldridge03 мая 2012 г., 17:05
В этих обстоятельствах оптимизатор Oracle не будет удалять заказ по предложению
 ypercubeᵀᴹ03 мая 2012 г., 13:54
а второму понадобится псевдоним.
 Phil03 мая 2012 г., 13:54
Первый запрос не анализируетс. Вы можете отредактировать свой вопрос.

Ответы на вопрос(1)

Решение Вопроса

Поскольку в первой выбраны первые десять строк с состоянием 0, а затем выполняется порядок, в этом случае первые десять выбранных строк не обязательно должны быть в верхнем порядке.

Ваш ответ на вопрос