Как выбрать данные из таблицы MySql по минимальной дате с дополнительным условием?
Помогите составить SQL запрос новичку. Есть таблица accounts, состоящая из трех полей (login, status, date). Поле статус можете иметь несколько значений, например "active" и "free"
Мне нужно вернуть строку с самой минимальной датой и status которой будет free.
Вот так получается выбрать только по минимальной дате: Select * from `accounts` where date IN (SELECT MIN(`date`) FROM `accounts`)
Вот так я пробовал прописать дополнительное условие: Select * from `accounts` where date IN (SELECT MIN(`date`) FROM `accounts`) AND `status`= 'free'
Пошел учить SQL, буду очень благодарен за помощь добрым людям )
вы бы хоть попробовали сначала написать select date, timestamp(date) from accounts limit 1
и посмотрели собственными глазами, есть ли хоть какая-то разница
select * from accounting where date(date) in (select date(min(date)) from accounting)
отлично работает на моем сервере, но я еще раз говорю - я к базам отношение имею весьма далекое, поэтому я ничего не знаю как точно работать с датами тут.
я понял почему это работает. потому что за ту же дату есть строки с нужным статусом.
но во-первых, этот запрос никак не гарантирует, что значение поля date действительно минимальное.
а во-вторых, строк с нужным статусом за минимальную дату может вообще не быть
Это не ответ, а чудовищное рука-лицо.
Дмитрий, если вы когда нибудь поумнеете, вам будет нереально стыдно за этот позорный ответ.
Извиняюсь за поспешный вывод, работает запрос, но не так как нужно. У меня могут быть строки вот с такими вот датами: 2021-07-01 00:00:10 и 2021-07-01 00:00:00. Сейчас запрос возвращает и ту и эту строку вместе, хотя должен вернуть только 2021-07-01 00:00:00, потому что у обоих status = free. Но вот например эту строку 2021-07-09 10:30:00 со статусом free он не вернул. Значит работает, но немного некорректно, такое ощущение, что он обращает внимание только на общую дату, но не берет во внимание время. Кто знает как решить, помогите..
этот запрос ничем не отличается от исходного :)
сейчас снова будет жалобный комментарий, "ой опять не работает"
а всё потому что надо не лазейку искать, а попробовать понять собственный код
FanatPHP, видимо отличается, date - это такой формат (2021-01-01), timestamp - это такой формат (2021-01-01 23:59:59), собственно это решило мою проблему, не просто потому что я так решил, а потому что делаю запрос, слежу как он выполняется и меня устраивает. Также формат поля date таблицы был изменен на timestamp. А ситуация когда ничего не возвращается (строк нет с такими параметрами), у меня обработана. Запрос, который у меня в топике, у меня не работал, Дмитрий поправил и уже остальное решилось по ходу. Если у тебя есть решение лучше и правильнее, то напиши и поделись, интересно посмотреть твоё решение. Я не разбираюсь, может и правда это позорное решение, но на удивление оно работает - а это главное.
оно у вас уже "работало" час назад. а потом вдруг перестало
никаких выводов из этого вы не делаете? :)
ну хотя бы минимум здравого смысла должен быть в рассуждениях?
например вам не приходило в голову, что у вас изначально был формат 2021-01-01 23:59:59, который Дмитрий вам своим "рабочим" решением поменял на 2021-01-01, и вы его теперь героически поменяли... обратно на 2021-01-01 23:59:59.
то есть вы вернулись к тому, с чего начали.
Неужели я что-то настолько сложное пишу для понимания?
FanatPHP, да какие-то чудеса происходят. Select * from `accounts` where date IN (SELECT MIN(`date`) FROM `accounts`) AND `status`= 'free'
Вот этот запрос изначально у меня выдавал синтаксическую ошибку и я порядком офигел сейчас, когда он заработал, т.к после твоего сообщения решил проверить ради интереса (до этого раз 5 точно пробовал). Если бы он отработал у меня, я бы и не писал сюда )) И сейчас всё равно ни фига не понял, почему у меня такая фигня была и где тут искать здравый смысл ) Спасибо.
Ну проблема видимо в том, что вы не можете собраться с мыслями.
В этом запросе нет синтаксической ошибки, и в исходном вопросе про ошибку не было ни слова.
Вы пишете довольно бессвязные реплики, часто противоречащие друг другу. Например про то что запрос должен возвращать строку с датой 2021-07-09. или вот сейчас про внезапно всплывшую откуда-то ошибку.
Возможно, дело в сильной жаре.
Попробуйте как-то охладиться, выспаться и привести мысли в порядок