Skip to main content
Announcements
Live today at 11 AM ET. Get your questions about Qlik Connect answered, or just listen in. SIGN UP NOW
cancel
Showing results for 
Search instead for 
Did you mean: 
nathroche
Contributor III
Contributor III

valeur selon dernière date

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

1 Solution

Accepted Solutions
lcloatre
Partner - Creator III
Partner - Creator III

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;

View solution in original post

23 Replies
sunny_talwar

What about if you use DISTINCT

=FirstSortedValue(DISTINCT CodeDiag, -Aggr(Max(DateDiag),IPP_ADMIN))

nathroche
Contributor III
Contributor III
Author

Thanks,

but it's still the first one, not the last one...

sunny_talwar

Even when you add the negative sign in front of the Aggr()?

Capture.PNG

antoniotiman
Master III
Master III

Hi,

may be

Aggr(Min(DateDiag),IPP_ADMIN)

Regards,

Antonio

christophebrault
Specialist
Specialist

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.

Inscrivez vous à ma Newletter Qlik
DoNotMissQlik- Connect with me on Linkedin
nathroche
Contributor III
Contributor III
Author

Yes, event with the negative sign...

nathroche
Contributor III
Contributor III
Author

thanks, but it do not work either...

i don't know why...

nathroche
Contributor III
Contributor III
Author

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

nathroche
Contributor III
Contributor III
Author

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