Довольно сложный SQL-запрос, над которым я работал, заставил меня задуматься об ограничении (ANSI) SQL:
Есть ли способ извлечь максимальную или минимальную запись по произвольному порядку?
Другими словами:
Задан такой запрос:
SELECT * FROM mytable WHERE <various conditions> ORDER BY <order clause>
возможно ли написать запрос, который возвращает только первую строку (возможно, путем преобразования предложения order во что-то еще)?
Я знаю, что вы можете сделать это, используя LIMIT (MySQL) / ROWNUM (Oracle) или аналогичный, но это не стандартный SQL.
Я также знаю, что вы можете сделать это, выбрав значение max / min, которое вас интересует в подзапросе (используя MIN () / MAX ()), и затем используйте этот результат в качестве критерия в вашем основном SELECT, то есть: 1014 *
SELECT * FROM mytable WHERE <various conditions> AND myMaxColumn=(
SELECT MAX(myMaxColumn) FROM mytable WHERE <various conditions>
)
Но это работает, только если я хочу отсортировать по одному столбцу. Я не вижу способа обобщить это на несколько столбцов (кроме вложенности вышеуказанного решения, но это будет означать 2 ^ n SELECT при упорядочении по n столбцам).
Так есть ли лучший способ в стандартном SQL, чем вложение нескольких вложенных элементов?
Соответствующий вопрос задается в Создайте запрос SQL для получения самых последних записей . Тем не менее, ответы там предлагают либо использовать LIMIT & friends, либо использовать подзапрос с MAX (), как описано выше, оба из которых не являются решением моего вопроса.