Если я хочу выбрать строку с максимальным значением для определенного столбца, я могу просто сделать это
SELECT * FROM tablename WHERE columnname=(SELECT MAX(columnname) FROM tablename)
Моя проблема двоякая. Во-первых, если это значение не столбец, а результат хранимой процедуры, работающей со строкой, каков синтаксис? Что-то вроде
SELECT * FROM tablename
WHERE CALL procname (???)
= (SELECT MAX (CALL procname (???) FROM tablename)
Как мне конкретизировать этот запрос?
Во-вторых, в этой наивной форме мы вызываем procname
один раз в каждой строке, чтобы определить MAX(...)
, а затем потенциально один раз снова в каждой строке, чтобы проверить, имеет ли каждая строка максимальное значение.
Как я могу оптимизировать это? Я предполагаю, что это может быть связано с временной таблицей, но я не знаю, насколько умный движок, я мысленно сравниваю это с производительностью цикла for в стиле C, который должен был бы только поддерживать значения по одной строке за раз.