Выбор конкретных данных SQL

0

Попытка выбрать самый последний и первый ввод определенной переменной из моей базы данных.

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.

Как обновить этот код?

  • 0
    Пожалуйста, предоставьте данные и правильную структуру таблицы и ожидаемый результат, чтобы на этот вопрос можно было ответить лучше.
Теги:

1 ответ

1
Лучший ответ

Вам нужно квалифицировать подзапрос, чтобы он выбирал только даты 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 к этому параметру.

  • 0
    Я пытаюсь связать "веселье" с датой. Я не уверен, что это сделает работу. Попытка отобразить «веселье», а не дату.
  • 1
    @ Джо Что Ник говорит, это то, что ваш подзапрос SELECT MIN(created_at) FROM treatment_log (и один для MAX ) полностью игнорирует идентификатор клиента. Он собирает самую последнюю и самую старую дату из всей таблицы treament_log , а не получает самую новую и самую старую от клиента .
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню