У меня есть таблица:
id | score | date
bob | 40 | 2010-1-1
bob | 70 | 2010-1-15
sue | 55 | 2010-1-1
sue | 80 | 2010-2-1
Я хочу запросить либо оценку для пользователя на определенную дату, ИЛИ, если для этого пользователя на эту дату нет оценки, вернуть оценку с самой последней даты для этого пользователя.
Есть ли способ сделать это без подзапроса?
Например, если я сделаю:
SELECT score
FROM table
WHERE id = '$id'
AND IFNULL(
date = DATE(FROM_UNIXTIME($date)),
MAX(date)
)
Я бы не получил результата, так как идентификатор не отображается для самой последней даты.
Обновление
Феликс напомнил мне, что я не могу использовать агрегатные функции в предложении WHERE, так что теперь мне интересно, есть ли псевдоагрегированная функция даты для произнесения «самой последней даты» в предложении where, и если да, если Я могу указать пользователя при использовании функции ТО?
Обновление 2
Так вот, это то, что я получил на работу, но я до сих пор не знаю, является ли это наилучшим способом (т. Е. Нужен ли мне вложенный запрос?):
SELECT score
FROM table
WHERE id = '$id'
AND date = IFNULL(
(SELECT date FROM table
WHERE id = '$id' AND
date = DATE(FROM_UNIXTIME($date))
),
(SELECT MAX(date) FROM table
WHERE id = '$id'
)
)