PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → Etats & Requêtes → GROUP BY et LAST
GROUP BY et LAST
Débuté par Greg, 17 oct. 2022 11:47 - 2 réponses
Posté le 17 octobre 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
Membre enregistré
1 message
Posté le 01 novembre 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/
Membre enregistré
3 messages
Posté le 22 février 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/