PC SOFT

FOROS PROFESIONALES
WINDEVWEBDEV y WINDEV Mobile

Inicio → Reports & Queries → GROUP BY et LAST
GROUP BY et LAST
Iniciado por Greg, 17,oct. 2022 11:47 - 2 respuestas
Publicado el 17,octubre 2022 - 11:47
Bonjour,
J'ai une ancienne base ACCESS, que je souhaite attaquer depuis une requête dans WINDEV.
J'ai déjà avancé sur ma requête, mais je bloque sur l'utilisation de LAST, avec un GROUP BY !?

SELECT Last(TablePlanningPerso.NumDossier) AS NumDossier, Last(TablePlanningPerso.Vague) AS Vague, Last(TablePlanningPerso.NomClient) AS NomClient, Last(TablePlanningPerso.DateMachine) AS DateMachine, Last(CInt(DatePart("ww",TablePlanningPerso.DateMachine,0,1))) AS NumSemaine
FROM TablePlanningPerso INNER JOIN TableDossierPerso ON TablePlanningPerso.NumDossier = TableDossierPerso.[N° de dossier]
GROUP BY(TablePlanningPerso.NumDossier & "_" & TablePlanningPerso.Vague)
HAVING (Last(TablePlanningPerso.DateMachine) > Now() - 30)
ORDER BY Last(CDbl(DatePart("yyyy",TablePlanningPerso.DateMachine) & format(DatePart("ww",TablePlanningPerso.DateMachine, 0, 1),"00"))), Last(TablePlanningPerso.DateMachine);


J'ai plus ou moins converti en WLanguage :
SELECT
TablePlanningPerso.NumDossier AS NumDossier,
TablePlanningPerso.Vague AS Vague,
TablePlanningPerso.NomClient AS NomClient,
(TablePlanningPerso.DateMachine) AS DateMachine,
(CInt(DATEPART("ww",TablePlanningPerso.DateMachine))) AS NumSemaine,
(TablePlanningPerso.DateTempsEnreg) AS dateenreg
FROM
TablePlanningPerso INNER JOIN TableDossierPerso ON TablePlanningPerso.NumDossier = TableDossierPerso.[N° de dossier]
WHERE
(TablePlanningPerso.DateMachine) > Now() - 30
GROUP by
(TablePlanningPerso.NumDossier & TablePlanningPerso.Vague),
TablePlanningPerso.NumDossier,
TablePlanningPerso.Vague,
TablePlanningPerso.NomClient,
(TablePlanningPerso.DateMachine),
(TablePlanningPerso.DateTempsEnreg)
ORDER by
format(DATEPART("yyyy",TablePlanningPerso.DateMachine),"0000") & format(DATEPART("ww",TablePlanningPerso.DateMachine),"00"), DateMachine Asc


Pour bien visualiser, j'ai ajouté le champ dateenreg, qui me donne la date et heure du dernier enregistrement sur un dossier.
Le LAST me permettait justement de ne retenir uniquement la dernière valeur pour chaque dossier.
Sans ce LAST, j'ai donc plusieurs résultats pour un même dossier, comme ci-dessous.





Le but serait d'isoler, pour le dossier 990385 vague 97 par ex, uniquement la ligne surlignée.
Mais comment faire sans la fonction LAST ?!?

Merci d'avance,
Greg
Miembro registrado
1 mensaje
Publicado el 01,noviembre 2022 - 08:04
I have the same issue. I even tried installing the toolbox first, but it didn’t work. Did you happen to resolve this? https://www.costco-ess.com/
Miembro registrado
3 mensajes
Publicado el 22,febrero 2023 - 10:58
Il n'est pas possible d'utiliser la fonction LAST() avec une clause GROUP BY dans une requête SQL pour une base de données Access. Vous devrez utiliser une alternative, comme la fonction DMax() pour récupérer la dernière valeur dans un groupe donné.
https://www.wellcaremedicare.org/