1
votes

Rejoignez deux tables en fonction de la date du premier

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


2 commentaires

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


3 Réponses :


0
votes

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;


1 commentaires

ne devrait pas envisager de visites avant la chirurgie précédente



0
votes

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 !!


0 commentaires

1
votes

L'utilisation de group by et count peut résoudre votre problème.

Veuillez essayer le code ci-dessous.

( https://i.stack.imgur.com/NFzdf.jpg)


2 commentaires

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.