Ich habe eine große Select-Anweisung, die herausfinden, was ein Kontakt der aktuelle Gerät links und rechts ist. Es funktioniert gut. Die große Auswahl gibt auch die contact_id der Person zurück. MySQL JOIN: Wie zu
Hier ist sie ...
SELECT locations.name AS location_name, CONCAT_WS(' ', contacts.first_name, contacts.last_name) AS contact_name, contacts.street_1, contacts.street_2, contacts.city, contacts.state, contacts.zip, contacts.home_phone, contacts.cell_phone, contacts.email, sel.side, delivery_date AS delivered_date, CONCAT_WS(': ', makes.name, models.name) AS details, sel.serial_number, contacts.warranty_expiration_email, contacts.warranty_expiration_letter, contacts.upgrade_letter, contacts.email_newsletter, contacts.mail_newsletter
FROM
(SELECT 'Left Device' AS side, left_sn AS serial_number, contact_id, left_make_id AS make_id, left_model_id AS model_id, MAX(left_delivery_date) AS delivery_date
FROM
invoice_hearing_aids
WHERE left_delivery_date IS NOT NULL AND left_return_date IS NULL AND trial_complete = 'Y' AND left_price IS NOT NULL AND company_id = '1' AND left_delivery_date = (SELECT MAX(t2.left_delivery_date)FROM invoice_hearing_aids t2 WHERE t2.contact_id = invoice_hearing_aids.contact_id)
GROUP BY contact_id
UNION
SELECT 'Right Device' AS side, right_sn AS serial_number, contact_id, right_make_id AS make_id, right_model_id AS model_id, MAX(right_delivery_date) AS delivery_date
FROM
invoice_hearing_aids
WHERE right_delivery_date IS NOT NULL AND right_return_date IS NULL AND trial_complete = 'Y' AND right_price IS NOT NULL AND company_id = '1' AND right_delivery_date = (SELECT MAX(t2.right_delivery_date)FROM invoice_hearing_aids t2 WHERE t2.contact_id = invoice_hearing_aids.contact_id)
GROUP BY contact_id
) sel
LEFT JOIN hearing_aid_models models ON models.id = sel.model_id
LEFT JOIN hearing_aid_makes makes ON makes.id = sel.make_id
LEFT JOIN contacts ON contacts.id = sel.contact_id
LEFT JOIN locations ON locations.id = contacts.location_id
Ich möchte eine Reihe von Informationen hinzuzufügen. Ich möchte eine Spalte mit dem Datum des letzten Termins des Kontakts zurückgeben.
Die Termintabelle hat start_date und eine Spalte namens post_appt_status_id. Ich möchte den MAX (start_date) WHERE post_appt_status_id IN (6,7) zurückgeben.
Wenn es keinen Termin in der Tabelle Termine gibt, geben Sie einfach NULL zurück.
Ich habe versucht, dieses Ende mit dem Zusatz:
LEFT JOIN appointments appt ON appt.contact_id = sel.contact_id
WHERE appt.post_appt_status_id IN (6,7)
und ich added dies zu Anfang an der Spitze SELECT:
MAX(appt.start_date)
Aber es wird alle Datensätze nicht zurück. In der Tat, ich bekomme nur 1 Zeile und ich sollte 1972 Zeilen bekommen, was ich habe, bevor ich meine Appts JOIN hinzugefügt habe.
Danke. Das habe ich gerade versucht. Ich bekomme nur 920 Datensätze. –
Ist es nicht der Punkt, es auf den letzten Termin zu reduzieren? Ich nehme an, viele dieser contact_id Zeilen sind für mehrere Termine, oder? – natecornell