2010-08-13 2 views
0

Первая часть этой проблемы была решена с помощью хорошей помощи здесь вчера, но сегодня я изо всех сил пытаюсь выполнить необходимый мне запрос. Я пытаюсь вытащить несколько столбцов из 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 
+0

Используйте одинарные кавычки, а не двойные: ' И FROM_UNIXTIME (d.updated, '% Y-% m-% d') <= DATE_FORMAT (DATE_SUB (NOW(), INTERVAL 25 день), '% Y-% m-% d') ' –

ответ

0

попробовать это:

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 d2.number = max_d 
AND FROM_UNIXTIME(d2.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 DESC 
+0

hi ovais - i попробовал это, но сравнение даты HAVING не сравнивается с полем d.updated последнего (MAX d.number) d ata_entry - запрос работает правильно, кроме этого ключевого предложения, в котором я застрял. Любые другие идеи? – franko75

+0

ввести другой присоединиться к таблице data_entires следующим из (домашних животных, р, владельцев как О, data_entries А.С. д, data_entries AS d2, k_records_owners А.С. kcro, k_records А.С. КЧР) , а затем в, где положение д. number = d2.number , а затем в разделе having relace d.updated с d2.updated –

+0

Теперь результаты в Unknown column 'd2.updated' в 'having clause' - я отредактировал свое оригинальное сообщение, чтобы вы могли видеть точный запрос, который вызывает эту ошибку (спасибо за помощь до сих пор) – franko75

Смежные вопросы