Vad du behöver är en HAVING
sats för att hitta COUNT(*) = 2
efter att ha grupperats efter datum och specialitet. I själva verket borde ingen häckning ens vara nödvändig. (Jag har även ersatt din implicita koppling med kommaseparerad FROM
sats med en explicit JOIN
, vilket är den mer föredragna moderna syntaxen).
SELECT
v.pid,
d.speciality,
v.date,
COUNT(COUNT DISTINCT d.did) AS numvisits
FROM
visits v
JOIN Doctors d ON v.did = d.did
GROUP BY v.pid, d.speciality, v.date
HAVING COUNT(COUNT DISTINCT d.did) = 2
/* Note - depending on your RDBMS, you may
be able to use the count alias as
HAVING numvisits = 2
MySQL allows this, for ex, but MS SQL Server doesn't and I think Oracle doesn't */
SELECT
lista här och GROUP BY
ska ge patient-id, specialitet, datum och antalet besök för den sammanlagda kombinationen av dessa tre kolumner. HAVING
klausulen begränsar det sedan till endast de med 2 besök för gruppen.
För att dra bara patienterna från detta, slå in det i en underfråga:
SELECT Patients.*
FROM Patients JOIN (
SELECT
v.pid,
d.speciality,
v.date,
COUNT(COUNT DISTINCT d.did) AS numvisits
FROM
visits v
JOIN Doctors d ON v.did = d.did
GROUP BY v.pid, d.speciality, v.date
HAVING COUNT(COUNT DISTINCT d.did) = 2
) subq ON Patients.pid = subq.pid