PC SOFT

PROFESSIONAL NEWSGROUPS
WINDEVWEBDEV and WINDEV Mobile

Home → Reports & Queries → GROUP BY et LAST
GROUP BY et LAST
Started by Greg, Oct., 17 2022 11:47 AM - 2 replies
Posted on October, 17 2022 - 11:47 AM
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
Registered member
1 message
Posted on November, 01 2022 - 8:04 AM
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/
Registered member
3 messages
Posted on February, 22 2023 - 10:58 AM
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/