Sous requet avec Max dans un select

narfight Messages postés 129 Date d'inscription lundi 17 mars 2003 Statut Membre Dernière intervention 4 mars 2010 - 25 août 2009 à 09:44
narfight Messages postés 129 Date d'inscription lundi 17 mars 2003 Statut Membre Dernière intervention 4 mars 2010 - 25 août 2009 à 10:50
Bonjour,

quand je veux prendre dans un DB les lignes qui ont comme IdxArchiv le plus grand, il me sort une erreur comme quoi il manque un opérateur après Max() :
Syntax error: Missing operand after 'MAX' operator.


voici la requête en question :
Dset.Tables("MaTable").Select("FileName='" + FileName + "' AND IdxArchiv=(Select MAX(IdxArchiv) FROM TimeEvent WHERE FileName='" + FileName + "')")


A-t-il moyen que ça fonctionne ainsi ou existe-il une possibilité plus propre ?

Merci d'avance pour votre aide

2 réponses

cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
25 août 2009 à 10:17
Salut
Select A And B From ...
Non, Select avec And ne peut pas fonctionner.
Imbriquer deux requètes Select en une seule : Je ne pense pas que cela marche.

Dans ta requète, je ne vois pas comment tu peux rechercher un fichier alors que tu connais déjà son nom ...

Si tu veux sortir le FileName qui a le Idx le plus grand :
Select("FileName, IdxArchiv " & _
       "FROM TimeEvent " & _
       "WHERE IdxArchiv = MAX(IdxArchiv))

Si tu dois concaténer le nom du fichier FileName à ton IdxArchiv, essaye ça :
Select("FileName + Convert(VarChar, IdxArchiv) " & _
       "FROM TimeEvent " & _
       "WHERE IdxArchiv = MAX(IdxArchiv))


Si j'ai répondu à côté de la plaque, repose clairement ta question en nous disant :
- Quels sont les éléments de ta table
- Si tu as plusieurs tables
- Ce que tu veux comme résultat
- etc ...

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
0
narfight Messages postés 129 Date d'inscription lundi 17 mars 2003 Statut Membre Dernière intervention 4 mars 2010
25 août 2009 à 10:50
J'ai déjà tenté de faire simplement un "where IdxArchiv = Max(IdxArchiv)" mais il me retourne l'IdxArchiv le plus haut de toute la table alors que je voudrais l'IdxArchiv le plus haut pour un FileName définit, c'est ce qui justifie ma tentative avec une sous-requête.

J'aurais pt du le dire avant, mais je passe par un DataSet. Car je vois dans ton exemple que tu ajoutes un "FROM" qui est explicite dans le DataSet (sauf si j'ai encore rien comprit)

voici la structure de ma table

+---------------------------+
|Primaire| Nom      | Type  |
+---------------------------+
|   Oui  | FileName | Texte |
|   Oui  | IdxArchiv| Int   |
|   Non  | Type     | String|
|   Non  | Data     | String|
+---------------------------+


En espérant avoir été complet dans mon énoncé !
0
Rejoignez-nous