Первая часть этой проблемы была решена вчера хорошей помощью, но сегодня я изо всех сил пытался выполнить нужный мне запрос.Я пытаюсь получить несколько столбцов из 5 соединенных таблиц на основе некоторых условий, но я хочу, чтобы набор результатов содержал только одну отдельную «запись данных» на p.id (идентификатор питомца, который является внешним ключом в таблице ввода данных)- этот data_entry должен иметь наибольшее число всех data_entries с этим p.id (то есть конкретный питомец может иметь data_entries с номерами 1,2 и 3 - я хочу только номер 3).У меня приведенный ниже код работает правильно в первом запросе, но я хочу добавить дополнительное предложение, которое проверяет «обновленную» дату возвращенной максимальной записи, но я не могу понять, как правильно интегрировать это предложение.
Любая помощь будет принята с благодарностью:
Этот упрощенный запрос корректно работает для 3 объединенных таблиц (без условия сравнения дат)
SELECT `p`.`id`, `o`.`id`, `o`.`email`, MAX(d.number)
FROM (`pets` AS `p`, `owners` AS `o`, `data_entries` AS `d`)
WHERE `p`.`owner_id` = `o`.`id`
AND `p`.`id` = `d`.`pet_id`
GROUP BY `p`.`id`, `o`.`id`, `o`.`email`
ORDER BY `d`.`number` DESC
Однако, когда я пытаюсьдобавив приведенное ниже условие сравнения даты и объединения между дополнительными таблицами, запрос не выполняет сравнение даты с «обновленным» столбцом data_entry с номером MAX, а проверяет наименьшее число.
SELECT `p`.`id` AS `pet_id`, `o`.`id` AS `owner_id`, `o`.`email`, MAX(d.number)
FROM (`pets` AS `p`, `owners` AS `o`, `data_entries` AS `d`, `k_records_owners` AS `kcro`, `k_records` AS `kcr`)
WHERE `p`.`owner_id` = `o`.`id`
AND `p`.`id` = `d`.`pet_id`
AND `p`.`kc_number` = `kcr`.`do_dg_dog_no`
AND `kcr`.`pa_breeder_no` = `kcro`.`contact_no`
AND FROM_UNIXTIME(`d`.`updated`, "%Y-%m-%d") <= DATE_FORMAT(DATE_SUB(NOW(), INTERVAL 25 day), "%Y-%m-%d")
GROUP BY `p`.`id`, `o`.`id`, `o`.`email`
ORDER BY MAX(d.number) DESC
РЕДАКТИРОВАТЬ: последняя попытка - приводит к появлению неизвестного столбца «d2.updated» в «имеющем предложение»
SELECT p.id AS pet_id, o.id AS owner_id, o.email, MAX(d.number) as max_d, d.updated
FROM (pets AS p, owners AS o, data_entries AS d, data_entries AS d2, kennel_club_records_owners AS kcro, kennel_club_records AS kcr)
WHERE p.owner_id = o.id
AND p.id = d.pet_id
AND p.kc_number = kcr.do_dg_dog_no
AND kcr.pa_breeder_no = kcro.contact_no
AND d.number = d2.number
GROUP BY p.id, o.id, o.email
having FROM_UNIXTIME(d2.updated, '%Y-%m-%d') <= DATE_FORMAT(DATE_SUB(NOW(), INTERVAL 25 day), '%Y-%m-%d')
ORDER BY max_d DESC