Unlock a world of possibilities! Login now and discover the exclusive benefits awaiting you.
Bonjour,
Je cherche à récupérer le dernier diagnostic posé pour chaque patient.
Pour cela, j'arrive à récupérer la date du dernier diagnostic, mais pas le diagnostic correspondant.
Avec cette formule, j'ai le premier diagnostic posé..
=FirstSortedValue(CodeDiag, aggr(max(DateDiag),IPP_ADMIN))
(Code diag: code du diagnostic
Date diag= date du diagnostic
IPP_ADMIN=identifiant patient)
J'ai vu que l'on pouvait avoir l'inverse de "FirstsortedValue en mettant un "-", mais dans ce cas, j'ai des cellules vides...
Est-ce que vous auriez une idée?
Merci!
Nathalie
Une version corrigée :
TDiag1:
SELECT
PATIENTS.IPP_ADMIN,
Max(ORD_DIA.D) AS MaxDeD,
Max(ORD_DIA.P12) AS MaxDeP12
FROM
PATIENTS LEFT JOIN
ORD_DIA ON PATIENTS.P4 = ORD_DIA.E4
GROUP BY PATIENTS.IPP_ADMIN;
T2Diag:
SELECT
DIAGNOSTICS.E12 as MaxDeP12,
REP_DIA.CODE,
REP_DIA.LIB_250
FROM DIAGNOSTICS, REP_DIA
WHERE DIAGNOSTICS.E14 = REP_DIA.P14;
TDiag3:
Noconcatenate
LOAD *
resident TDiag1;
Left Join
LOAD *
resident T2Diag;
What about if you use DISTINCT
=FirstSortedValue(DISTINCT CodeDiag, -Aggr(Max(DateDiag),IPP_ADMIN))
Thanks,
but it's still the first one, not the last one...
Even when you add the negative sign in front of the Aggr()?
Hi,
may be
Aggr(Min(DateDiag),IPP_ADMIN)
Regards,
Antonio
Bonjour Nathalie,
Je traite le même genre de besoin en ajoutant l'information directmeent dans le script. Ainsi, si tu as une table qui ressemble à cela :
ID_CLIENT, ID_DIAGNOSTIQUE,DATE_DIAGNOSTIQUE
Tu peux dans ton chargement faire un chargement
LOAD ID_CLIENT,
Max(DATE_DIAGNOSTIQUE) as MAX_DATE
FROM ...
GROUP BY ID_CLIENT
left join
LOAD ID_CLIENT,
num(DATE_DIAGNOSTIQUE) as MAX_DATE,
ID_DIAGNOSTIQUE as ID_DIAGNOSTIQUE_LAST
FROM ... ;
Tu as donc dans cette table seulement le dernier ID_DIAGNOSTIQUE. Quand tu charge ta table existante, rajoute un champs en faisant :
If(exists(ID_DIAGNOSTIQUE_LAST,ID_DIAGNOSTIQUE),1,0) as FLAG_LAST_DIAGNOSTIQUE.
Réutilise ensuite ce flag dans les expressions pour avoir les derniers diagnostique = 1.
Yes, event with the negative sign...
thanks, but it do not work either...
i don't know why...
Bonjour,
J'ai essayé du SQL dans le script:
TDiag1:
SELECT
PATIENTS.IPP_ADMIN,
Max(ORD_DIA.D) AS MaxDeD,
Max(ORD_DIA.P12) AS MaxDeP12
FROM
PATIENTS LEFT JOIN
ORD_DIA ON PATIENTS.P4 = ORD_DIA.E4
GROUP BY PATIENTS.IPP_ADMIN;
T2Diag:
SELECT
TDiag1.IPP_ADMIN,
TDiag1.MaxDeD,
REP_DIA.CODE,
REP_DIA.LIB_250
FROM
(TDiag1 LEFT JOIN DIAGNOSTICS ON TDiag1.MaxDeP12 = DIAGNOSTICS.E12)
LEFT JOIN REP_DIA ON DIAGNOSTICS.E14 = REP_DIA.P14
GROUP BY
TDiag1.IPP_ADMIN, TDiag1.MaxDeD, REP_DIA.CODE, REP_DIA.LIB_250;
Mais si il me reconnait bien la table TDiag1 mais pas TDiag2 qui contient le résultat...
Une idée du pourquoi il ne marche pas??
Merci,
Nathalie
En fait pour préciser: la date du diagnostic n'est pas dans la même table que le code du diagnostic.
Je dois passer par une table intermédiaire: DIAGNOSTICS pour récupérer le code à partir de la date du diagnostic