Bonjour à tous, Je vous sollicite pour une requête SQL. Voici le type de données : ID Année x 2009 x 2008 x 2007 x 2006 x 2005 x 2004 x 2003 y 2019 y 2018 y 2017 y 2016 y 2015 y 2014 z 2017 z 2016 z 2015 z 2014 Ce que je cherche à faire c'est : Récupérer les 3 dernières années pour chaque ID. exemple dans ce cas : ID Année x 2009 x 2008 x 2007 y 2019 y 2018 y 2017 z 2017 z 2016 z 2015 Avez-vous déjà rencontré ce cas, si oui, comment l'avez vous résolu. ce doit être quelque chose du type requête imbriqué avec un GROUP BY et un TOP 3 mais je n'y arrive pas. SELECT TOP 3 Table.ID FROM Table GROUP BY ID ORDER BY Table.Année
Bon, j'ai fait un truc moche mais fonctionnel 1) J'ajoute une colonne avec un booléen à ma table 2) je fais une requete avec un DISTINCT sur l'ID de ma table [windev]SELECT DISTINCT Table.ID AS ID FROM Table[/windev] Je fais une requete avec un TOP 3 et un parametre sur l'ID [windev]SELECT TOP 3 Table.ID AS ID, Table.Année AS Année, Table.Booléen AS Booléen FROM Table WHERE Table.ID= {ParamID} ORDER BY Année DESC[/windev] 4) Je modifie la colonne booléenne [windev]HExécuteRequête(REQ_Distinct) POUR TOUT REQ_Distinct REQ_TOP3.ParamID = REQ_Distinct.ID HExécuteRequête(REQ_TOP3,hModifieFichier) POUR TOUT REQ_TOP3 REQ_TOP3.Booléen= 1 HModifie(REQ_TOP FIN FIN[/windev] 5) Une dernière requête pour l'affichage [windev]SELECT Table.ID AS ID, Table.Année AS Année, Table.Booléen AS Booléen FROM Table WHERE Booléen = 1 ORDER BY Année DESC ID ASC[/windev] Un meilleur code est le bienvenue : )
Bonjour Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens! , pour faire une requête simple, je ne vois pas comme ça. Par contre j'irais plutôt avec une boucle pour parcourir tout tes ID Je prends en considération que ton ID est un entier pour facilité ici, reste à adapté. J'irais avec 2 requêtes Code (Windev): // Ton distinct est correct ***REQ_DistinctID*** SELECT DISTINCT Table.ID AS ID FROM Table ***REQ_TOP3*** SELECT TOP 3 Table.ID as ID, Table.Annee as Annee FROM Table WHERE Table.ID = {pID} ORDER BY Annee DESC // pour ce qui est du code tId est un tableau d'entier stResultat est une structure Id est un entier Annee est un entier FIN tMonResultat est un tableau de stResultat // celui-ci pourra être utilisé pour manipuler l'IHM tTemp est un tableau de stResultat // tableau temporaire // boucle pour ajouter les id dans une table (pas nécessaire mais j'aime mieux travailler avec des tableau pour me boucle :P) POUR TOUT REQ_DistinctID tId.ajoute(REQ_DistinctID.ID) FIN // Exécution de la requête top 3 pour chaque ID de notre tableau POUR TOUT id DE tId REQ_TOP3.pID = id HexecuteRequete(REQ_TOP3) // récupération des données dans un tableau mémoire Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!(tTemp, REQ_TOP3) // ajout du tableau temporaire à notre tableau de résultat POUR TOUT r de tTemp tMonResultat.Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!(r) FIN FIN Tout tes ID est tes années sont maintenant stocké dans ton tableau stResultat que tu peux manipuler pour ton IHM. L'avantage de le faire ainsi est que c'est facile d'exécuter la boucle de requête REQ_TOP3 en tâches parallèles et d'amélioré les performances dépendant du nombre d'ID que tu as. Si tu en a 3-4 ca vaut pas la peine, mais si tu en a plusieurs ceci paraitra énormément. Espérant t'avoir aidé