У меня вопрос MySQL. У меня есть таблица с тремя столбцами: «salesdate» (содержит дату), «salestime» (содержит время) и «остаток» (содержит целое число). Таблица содержит как прошлые, так и будущие даты. Я хочу выбрать значение из «остатка», которое наиболее близко соответствует текущей дате и времени.MySql запросить подмножество
Я построил запрос ниже, но он только выбирает значения, где оба значения даты и времени являются истинными. Это может привести к неправильному результату, поскольку в «salesdate» могут быть строки со вчерашней датой, но все значения «salestime» больше текущего времени, поэтому мой текущий запрос будет игнорировать эти ... даже если они являются ближайшими на текущую дату/время.
Мой текущий запрос:
$result = mysql_query(
"SELECT remaining
FROM quantity_time
WHERE salesdate<=CURDATE()
AND salestime<=CURTIME()
ORDER BY salesdate DESC
LIMIT 1 ");
Я думаю, что мне нужно сделать, это запрос для дат первого, а затем каким-то образом отфильтровать этот список, чтобы показать дату/время, которое ближе всего к текущему времени? но как ? Если вы можете помочь - я искал и не могу найти ясный, шаг за шагом способ сделать это. Ваша помощь очень ценится.
Привет. спасибо за ваш анализ. Время и дата относятся к одному и тому же событию. И salesdate + time включают будущие даты (согласно моему описанию «Таблица содержит как прошлые, так и будущие даты»).Эти ярлыки могут быть немного запутанными, поскольку это не таблица запасов/транзакций. Я выполнил запрос, как указано выше, и это вернуло самую старую запись, но когда она была изменена на ASC, она вернула последнюю запись на сегодняшний день - но это было в будущем. Любой способ не включать будущее? Если я использовал поле datetime, то как бы я выполнил запрос? – Zander
Изменение поля даты и времени, чтобы стать одно поле даты и времени, как вы предложили, и с помощью следующего запроса, кажется, возвращает правильное значение: $ Result = mysql_query ( \t «SELECT оставшиеся \t ОТ quantity_time \t WHERE даты и времени <= NOW() \t Предел 1 \t "); – Zander
Извините за предмет ASC/DESC - здесь уже поздно. Чтобы опустить будущие вещи, добавьте WHERE TIMESTAMP (saelesdate, salestime) <СЕЙЧАС() и удалите ABS fn (но сохраните его аргумент). Если производительность важна, добавьте индекс в новое поле. – symcbean