J'ai deux tableaux comme ci-dessous (format de date: aaaa-MM-jj):
1) Tableau1 - CHIRURGIE
EMPLOYEE_ID | SUGERY_DATE | NUMBER OF VISIT ------------------------------------------------------- 1 | 2012-04-01 | 4 2 | 2012-08-14 | 0 1 | 2012-07-22 | 2 4 | 2012-10-30 | 1 3 | 2012-06-07 | 1
2) Tableau2 - VISITE p>
P_ID | VISIT_DATE ----------------------------------------- 1 | 2012-03-28 1 | 2012-04-14 1 | 2012-05-17 1 | 2012-09-12 3 | 2012-07-15 4 | 2012-10-10 3 | 2012-06-01
Les tables SURGERY et VISIT sont jointes à partir d'autres tables. Je voudrais trouver tous les enregistrements qui répondent aux critères suivants: VISIT_DATE> = SURGERY_DATE
3) Tableau de résultats
P_ID | SURGERY_DATE ------------------------------------------------ 1 | 2012-04-01 2 | 2012-08-14 1 | 2012-07-22 4 | 2012-10-30 3 | 2012-06-07
3 Réponses :
Vous pouvez utiliser une sous-requête corrélée:
select s.*, (select count(*) from visit v where v.p_id = s.p_id and v.visit_date > s.surgery_date ) as num_visits_after from surgery s;
ne devrait pas envisager de visites avant la chirurgie précédente
Vous devez utiliser group by et compter avec une condition mentionnée comme la suivante:
SELECT S.P_ID, S.SURGERY_DATE, SUM(CASE WHEN V.VISIT_DATE > S.SURGERY_DATE THEN 1 END) AS NUM_VISITS_AFTER FROM SURGERY S LEFT JOIN VISIT V ON ( S.P_ID = V.P_ID ) GROUP BY S.P_ID, S.SURGERY_DATE;
Cheers !!
L'utilisation de group by et count peut résoudre votre problème.
Veuillez essayer le code ci-dessous.
Veuillez ne pas publier le code sous forme d'image mais sous forme de texte brut.
Je suis désolé d'avoir du mal à publier la réponse car le stackoverflow indique qu'il y a un caractère invalide dans ma réponse.
Veuillez nous montrer votre code et indiquer où vous rencontrez des problèmes.
Votre logique n'est pas claire, pourquoi le nombre de visites pour le deuxième 1 est de 2? ça doit être 1