@bear1489

Как составить запрос с выборкой по минимальной дате и ещё одному условию?

Есть таблица с именем example. В ней 3 поля: name (TEXT), status (TEXT), date (TIMESTAMP).

Нужно извлечь один "name", у когорого status='free' и с минимальной датой.

Вот мой запрос: select name from example where timestamp(date) IN (select timestamp(min(date)) from example) and status = 'free' LIMIT 1;

Проблема: запрос работает до тех пор, пока в таблице не появится name с другим статусом (например status='stop') и у этого name с другим статусом как раз таки будет самая минимальная дата. В таком случае этот запрос ничего не возвращает. То есть, как я понимаю, в этом случае он отбирает минимальную дату, независимо от значения status, а потом смотрит status, он не free и соответственно ничего не возвращается.

6175df5586346734087142.jpeg

Вот мне нужно, чтобы в выборку попал item1, так как у него минимальная дата и статус free. А запрос в этом случае не возвращает ничего, так как минимальная дата у item5 со статусом stop.

Пробовал ещё вот так:

select name from example where timestamp(date) IN (select timestamp(min(DATE)) and status = 'free' from example) and status = 'free' LIMIT 1;

Нужно как-то переписать запрос, чтобы он высчитывал минимальную дату (date) только из строк со статусом free. Если же есть строки с другими статусами, чтобы он их не считал.
  • Вопрос задан
  • 104 просмотра
Решения вопроса 1
Fernus
@Fernus
Техник - Механик :)
SELECT `name` 
FROM `example`
WHERE `status` = 'free'
ORDER BY `date`ASC
LIMIT 1;

Не?
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы