Попытка выбрать самый последний и первый ввод определенной переменной из моей базы данных.
Im используя следующее:
SELECT treatment_log.fun FROM treatment_log LEFT JOIN customers ON treatment_log.treatment_fk=customers.id WHERE treatment_log.created_at=( SELECT MAX(created_at) FROM treatment_log) AND customers.id = ?
SELECT treatment_log.fun FROM treatment_log LEFT JOIN customers ON treatment_log.treatment_fk=customers.id WHERE treatment_log.created_at=( SELECT MIN(created_at) FROM treatment_log) AND customers.id = ?
Один из MIN - это MAX. Im пытается отобразить данные на основе дат (created_at) [это автоматическая генерация времени). Текущий код, похоже, не работает. Он отобразит только данные, введенные в последнее время, и дисплей NULL.
Как обновить этот код?
Вам нужно квалифицировать подзапрос, чтобы он выбирал только даты created_at
для интересующего вас клиента. В противном случае вы получите даты MIN и MAX created_at
независимо от идентификатора клиента, и это может не соответствовать вашему текущему клиенту. Вот почему иногда вы не возвращаете данные. Попробуйте изменить подзапрос:
( SELECT MAX(created_at) FROM treatment_log WHERE treatment_fk = ?)
Таким образом, весь ваш запрос станет
SELECT treatment_log.fun
FROM treatment_log
LEFT JOIN customers
ON treatment_log.treatment_fk=customers.id
WHERE treatment_log.created_at=(SELECT MAX(created_at) FROM treatment_log WHERE treatment_fk = ?)
AND customers.id = ?
Вам также необходимо внести аналогичные изменения в подзапрос MIN
. Также обратите внимание, что вам также необходимо привязать значение customers.id
к этому параметру.
SELECT MIN(created_at) FROM treatment_log
(и один для MAX
) полностью игнорирует идентификатор клиента. Он собирает самую последнюю и самую старую дату из всей таблицы treament_log
, а не получает самую новую и самую старую от клиента .