la première partie de ce problème a été résolue par une bonne aide sur ici hier, mais j'ai lutté aujourd'hui pour compléter la requête dont j'ai besoin. J'essaie de tirer plusieurs colonnes de 5 tables jointes en fonction de certaines conditions, mais je veux que le jeu de résultats ne contienne qu'une seule "entrée de données" par p.id (l'identifiant d'animal de compagnie qui est une clé étrangère dans la table de saisie) - this data_entry devrait avoir le plus grand nombre de tous les data_entries avec ce p.id (ie un animal de compagnie spécifique pourrait avoir des data_entries numérotés 1,2 et 3 - je veux seulement le numéro 3). J'ai le code ci-dessous fonctionne correctement dans la première requête, mais je veux ajouter une clause supplémentaire qui vérifie la date "mise à jour" de l'enregistrement max renvoyé, mais je ne peux pas sembler travailler comment intégrer cette clause correctement.Groupe-sage-max - aide de requête de données hiérarchique
Toute aide serait grandement appréciée:
Cette requête simplifiée fonctionne correctement sur 3 tables jointes (sans la clause de comparaison date)
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
Cependant, lorsque je tente d'ajouter la clause de comparaison de date ci-dessous et les jointures entre les tables supplémentaires, la requête n'effectue pas la comparaison de date par rapport à la colonne "mise à jour" de data_entry avec le nombre MAX, à la place elle vérifie contre le nombre le plus bas.
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: dernière tentative - résultats dans Unknown column 'd2.updated' dans 'having'
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
Utilisez des guillemets simples, pas de double: ' AND FROM_UNIXTIME (d.updated, '% Y-% m-% d') <= DATE_FORMAT (DATE_SUB (MAINTENANT(), INTERVAL 25 jour), '% Y-% m-% d') ' –