Bonjour,
J'ai un problème avec une requête SQL. Je l'ai faite sous WinDev mais mon problème vient de ma requête donc je poste ici.
J'ai donc une requête qui doit afficher les caractéristiques des Agents (ou Utilisateurs) et de leur Carte associée en fonction de la commande sélectionnée (qui commande les cartes en question).
Ces cartes peuvent être reçues en plusieurs fois et donc lorsque la commande a été envoyée, il doit être possible de signaler la réception d'une carte à la fois (ce qui est fait dans mon programme).
Lorsque l'on signale la réception d'une carte, cela ajoute un enregistrement dans une table Suivi (l'historique) qui signale que la carte a été reçue. L'enregistrement doit être ajouté et non modifié pour garder une trace de toute les actions effectuées.
Je me retrouve donc avec, par exemple, deux suivis 1 et 2 tout deux associés à un agent X et sa carte Y. La seule différence réside dans l'IDOpération, qui est à 6 dans le premier cas (carte commandée) et 5 dans le deuxième (carte reçue).
Donc lorsque je lance ma requête, je voudrais qu'elle garde uniquement la dernière opération effectuée pour chaque association carte/agent.
Voici ma requête :
le "CASE WHEN Suivi.IDOpération = '6' THEN 0 ELSE 1 END AS EtatCarte" me permet de définir un booléen vrai si la carte est reçue et faux si elle ne l'est pas.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59 SELECT Carte.identifiant AS identifiant, Agent.matricule AS matricule, Agent.civilite AS civilite, Agent.nom AS nom, Agent.prénom AS prénom, Agent.dateNaissance AS dateNaissance, Agent.numTel AS numTel, Agent.Adresseemail AS Adresseemail, Agent.codeADELI AS codeADELI, Agent.codeRPPS AS codeRPPS, TypeCarte.libelle AS libelle, Grade.libelle AS libelle_Gr, Métier.libelle AS libelle_Mé, Pole.libelle AS libelle_Po, Service.libelle AS libelle_Se, Spécialité.libelle AS libelle_Sp, UF.libelle AS libelle_UF, Carte.codeFINESS AS codeFINESS, CASE WHEN Suivi.IDOpération = '6' THEN 0 ELSE 1 END AS EtatCarte FROM Spécialité Right OUTER JOIN Agent on Agent.IDSpécialité = Spécialité.IDSpécialité, Pole Right OUTER JOIN Agent on Agent.IDPole = Pole.IDPole, Service Right OUTER JOIN Agent on Agent.IDService = Service.IDService, Grade Right OUTER JOIN Agent on Agent.IDGrade = Grade.IDGrade, Métier Right OUTER JOIN Agent on Agent.IDMétier = Métier.IDMétier, UF Right OUTER JOIN Agent on Agent.IDUF = UF.IDUF, Agent INNER JOIN Affectation on Affectation.IDAgent = Agent.IDAgent, Carte INNER JOIN Affectation on Affectation.IDCarte = Carte.IDCarte, Carte INNER JOIN Suivi on Suivi.IDCarte = Carte.IDCarte, Commande INNER JOIN Carte on Carte.IDCommande = Commande.IDCommande, TypeCarte INNER JOIN Commande on Commande.IDTypeCarte = TypeCarte.IDTypeCarte WHERE ( Commande.IDCommande = {Param1} ) ORDER BY nom Asc, identifiant Asc
Donc comment récupérer uniquement les derniers enregistrements des suivis associé aux cartes de la commande pour avoir 1 enregistrement par carte au lieu d'un par suivi ?
Si vous avez des questions, n'hésitez pas, je peux comprendre que mon explication soit un peu confuse .
Merci d'avance,
Aenur.
Partager