В предложенном выше подходе используется подзапрос, чтобы узнать, какая самая последняя дата присоединения. Этот подзапрос возвращает скалярную таблицу, то есть таблицу с одним столбцом и одной строкой. Поскольку у нас есть только одно значение, мы можем заменить подзапрос везде, где мы могли бы поместить одно постоянное значение. В этом случае мы используем его для завершения предложения WHERE для поиска данного члена клуба.
Может быть, Вам придет в голову следующая идея:
select firstname, surname, max(joindate)
from cd.members
К сожалению, это не сработает. Функция MAX не ограничивает строки, как это делает предложение WHERE — она просто изучает набор значений и возвращает самое большое из них. После этого база данных задается вопросом, как соединить длинный список имен с единственной датой присоединения, которая вышла из функции max, и терпит неудачу.
Как упоминалось в подсказке, есть и другие способы выполнить эту задачу —пример приводим ниже. В этом подходе, вместо того, чтобы явно выяснять дату последнего присоединения, мы просто упорядочиваем нашу таблицу участников в порядке убывания даты присоединения и выбираем первую. Обратите внимание на то, что этот подход не учитывает маловероятную возможность одновременного присоединения сразу двух человек :-)
select firstname, surname, joindate
from cd.members
order by joindate desc
limit 1;