Requête qui me casse la tête

Résolu
chmouette Messages postés 57 Date d'inscription jeudi 10 mars 2005 Statut Membre Dernière intervention 21 juillet 2005 - 17 mars 2005 à 10:58
chmouette Messages postés 57 Date d'inscription jeudi 10 mars 2005 Statut Membre Dernière intervention 21 juillet 2005 - 18 mars 2005 à 09:32
Salut les gens!
Mon problème est purement SQL. J'ai une table Ma Table avec des champs tels que :

+-------------------------+
! MaTable !
+-------------------------+
! I D !
! Date !
! Variable !
+-------------------------+ par exemple.

Je voudrai récupérer les ID des dernières versions, c'est à dire, chaque ID dont la date est le maximal du groupe des valeurs ayant la même Variable

Je suis peut être pas clair... je réessaye :

immaginons que j'ai ces valeurs dans ma table :

ID ! Date ! Variable
----+-------+------------ la requête devrait me retourner :
1 ! 95 ! 1 4 'car de tous ceux qui ont Variable=1 c'est le + récent
2 ! 96 ! 1 3 'Car de tous ceux qui ont Variable=2 c'est le + recent
3 ! 94 ! 2
4 ! 98 ! 1
...

Merci d'avance,
et c'est décidé, un jour je parlerai SQL courament, mais au collège yavait pas, ils m'ont fait prendre Allemand...

__________________________________________________________
On ne devrait vivre qu'une minute et demie,
Le temps du premier baiser et du premier demi !

4 réponses

chmouette Messages postés 57 Date d'inscription jeudi 10 mars 2005 Statut Membre Dernière intervention 21 juillet 2005
18 mars 2005 à 09:32
Ca y est voilà une solution qui marche :

SELECT Gestion_ID FROM [Gestion de la configuration] a
WHERE Systeme_ID= a.systeme_ID AND date (select top 1 Date from [Gestion de la configuration] b where b.Systeme_ID a.Systeme_ID order by b.date);

Merci à Loyousse et au gens qui ont répondu au topic Select sans doublon avec date la plus recente =370366 http://www.sqlfr.com/forum.v2.aspx?ID=370366 sur SQL

Merci aux autres aussi...

++
_________________________________________________________________

On ne devrait vivre qu'une minute et demie,
Le temps du premier baiser et du premier demi !
3
crenaud76 Messages postés 4172 Date d'inscription mercredi 30 juillet 2003 Statut Membre Dernière intervention 9 juin 2006 28
17 mars 2005 à 13:03
Il y a un Forum dédié à SQL sur CS ... va voir dans la rubrique Autres Langages du menu de gauche ... tu auras peut-être une foudre en SQL qui te répondra en 3s1/2
Christophe R
0
JoePatent Messages postés 171 Date d'inscription jeudi 30 janvier 2003 Statut Membre Dernière intervention 20 juillet 2008
17 mars 2005 à 16:17
Une requête seule ne pourra faire ce travail. Tu peux te créer un stored procedure pour y arriver ou bien le coder en vb de la facon simple suivante :

SELECT * FROM maTable ORDER BY variable, date

Étant trié tu peux naviguer avec une boucle a travers ton recordset. Tu récupère les enregistrements pertinent dans un tableau ou une structure/classe a ton choix.

Aussitot que "variable" change de valeur, tu tombe automatiquement sur un bon id. Tu passe ensuite les autres enregistrements jusqu'à temps de tomber sur une autre variable. etc.

rst.open ("SELECT * FROM maTable ORDER BY variable, date"

variable = rst!variable
'tu me le premier record automatiquement dans ta struct
rst.nextrecord
for j=2 to rst.recordcount
if not (variable = rst!variable) then
'On a passé a la prochaine valeur de [variable]
variable = rst!variable
!tu met ce id en memoire dans ta struct
end if
rst.nextrecord
next j

http://www.joepatent.com
0
cs_Tipo Messages postés 82 Date d'inscription dimanche 2 novembre 2003 Statut Membre Dernière intervention 13 avril 2017 1
17 mars 2005 à 17:08
Une petite idée :

PARAMETERS [VAR] Integer;
SELECT ID
FROM tatable WHERE tatable.date=(SELECT Max(date) FROM tatable WHERE tatable.variable=[VAR]);

Peut-être en l'intégrant cette requête dans une boucle qui parcourt un recordset contenant toutes les valeurs que peuvent prendre tes variables.
0
Rejoignez-nous