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