Первая часть этой проблемы была решена с помощью хорошей помощи здесь вчера, но сегодня я изо всех сил пытаюсь выполнить необходимый мне запрос. Я пытаюсь вытащить несколько столбцов из 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
EDIT: последняя попытка - результаты в Unknown колонке '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
Используйте одинарные кавычки, а не двойные: ' И FROM_UNIXTIME (d.updated, '% Y-% m-% d') <= DATE_FORMAT (DATE_SUB (NOW(), INTERVAL 25 день), '% Y-% m-% d') ' –