IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Requêtes et SQL. Discussion :

[SQL] requete select max


Sujet :

Requêtes et SQL.

  1. #1
    Membre à l'essai
    Inscrit en
    Février 2005
    Messages
    41
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 41
    Points : 20
    Points
    20
    Par défaut [SQL] requete select max
    Bonjour,

    Ma table est composé comme ceci :

    client1, nomlog, version, dateenvoi, dateinstall

    Exemple de données :

    5000, Excel, 2000, 15/01/2000, 30/01/2000
    5000, Excel, 2002, 16/01/2002,
    5001, Excel, 2000, 15/01/2000,
    5001, Excel, 2003, 15/01/2003,

    Je veux sortir un état qui me permet de voir pour chaque client la dernière version installée.

    J'arrive à sortir ceux qui sont à jour, ceux qui ne le sont pas, mais je bloque pour avoir la liste de chaque client avec leur version, leur date d'installation, etc...

    Je pense qu'il faut faire des select max, mais je ne vois pas trop comment.

    Si qqun peut m'aider.

    Merci

  2. #2
    Membre actif Avatar de samlepiratepaddy
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    320
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 320
    Points : 217
    Points
    217
    Par défaut
    Slt,
    il faut soit passer par MAx sur la version!(en supposant que le chiffre de la dernière version soit toujours supérieur a une ancienne)
    Comme critère date d'installation "est pas null"
    Ta requete sortira les clients qui ont eu une installation de leur dernière version !

    Sinon un max de date sur le champ date d'installation te permettra de voir la dernière installation faite et de ce fait sa version !
    Requete-->création-->Regroupement-->Max-->sur le champ dateinstall


    Voilà @+

  3. #3
    Membre à l'essai
    Inscrit en
    Février 2005
    Messages
    41
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 41
    Points : 20
    Points
    20
    Par défaut
    Alors voila ma requete en SQL :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    SELECT DISTINCT TBLclientlogiciel.FKnumcli, Max(TBLclientlogiciel.FKversion) AS MaxDeFKversion, TBLclientlogiciel.FKlogiciel, TBLclientlogiciel.datecharg
    FROM TBLclientlogiciel
    GROUP BY TBLclientlogiciel.FKnumcli, TBLclientlogiciel.FKlogiciel, TBLclientlogiciel.datecharg
    HAVING (((TBLclientlogiciel.FKlogiciel)="EXC") AND ((TBLclientlogiciel.datecharg) Is Not Null));
    Il ne m'affiche bien que la dernière version du logiciel pour chaque client, mais j'ai toutes les lignes pour chaque client ou une date d'installation est présente.

    Ex :
    J'ai autant de fois le client 5000, avec toutes ses versions installées et leur date.

    Comment faire pour n'afficher que la plus récente?

  4. #4
    Membre actif Avatar de samlepiratepaddy
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    320
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 320
    Points : 217
    Points
    217
    Par défaut
    Re,
    Je ne suis pas très callé en SQL mais moi je procède par étape !
    Requete simple puis j'affine et a chaque critère je regarde ce que cela donne
    Pour ton cas si il t'affiche toutes les versions c'est que le max n'est pas mis ou il faut ...
    Je pense...
    Ou alors tu va devoir batir deux requetes
    Une qui retrace ceux qui ont eu une version, puis une autre qui va retracer le max d'instal de cette version
    Question
    FKversion
    est le nom du champ ou ce trouve la date d'installation????

  5. #5
    Membre à l'essai
    Inscrit en
    Février 2005
    Messages
    41
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 41
    Points : 20
    Points
    20
    Par défaut
    Non FKversion est le numéro de version installé et datecharg la date d'installation.

    J'ai déjà essayé de procéder par étape, mais je n'arrive pas à aller plus loin que la.

  6. #6
    Membre actif Avatar de samlepiratepaddy
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    320
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 320
    Points : 217
    Points
    217
    Par défaut
    En fait dans ta SQL tu lui demande le max de la version ET les dates Instal PAS NULL
    Donc les deux critères soont respectés dans ta requete !
    Dans un premier temp repose toi la bonne question :
    Je veux la dernière date de la mise en place de la dernière version??
    Alors je place le max sur la date pas la version !!!!
    Il est evident que la derniere version installée sera au max...
    Sauf si tu installe une ancienne version après une nouvelle !!
    La requete te donne quelle version j'ai actuellement pour ce client, par rapport a la dernière installée !!!
    Met le max sur
    datecharg
    et le tour est joué !
    Je te rapelle ta question
    Je veux sortir un état qui me permet de voir pour chaque client la dernière version installée.
    Pas la version la plus évoluée, la dernière mis en place !
    Tiens moi au courant

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    96
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 96
    Points : 52
    Points
    52
    Par défaut
    voila le boulot 8)


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT [TBLclientlogiciel].[fklogiciel], [TBLclientlogiciel].[fknumcli], [TBLclientlogiciel].[fkversion]
    FROM TBLclientlogiciel
    WHERE (((TBLclientlogiciel.datecharge) Is Not Null) AND  ((TBLclientlogiciel.fklogiciel)="Access") AND ((TBLclientlogiciel.fkversion) In (select max(fkversion) from TBLclientlogiciel where ((TBLclientlogiciel.fklogiciel)="Access")   GROUP BY fknumcli)));

  8. #8
    Membre à l'essai
    Inscrit en
    Février 2005
    Messages
    41
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 41
    Points : 20
    Points
    20
    Par défaut
    Re

    Désolé Kleenex mais ta solution ne fonctionne pas.
    Il me retourne uniquement les clients qui ont installé la dernière version => donc qui ont une date de chargement not null et Max version.

    Voici le code que je viens de mettre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    SELECT TBLclientlogiciel.FKlogiciel, TBLclientlogiciel.FKnumcli, TBLclientlogiciel.FKversion
    FROM TBLclientlogiciel
    WHERE (((TBLclientlogiciel.datecharg) Is Not Null And (TBLclientlogiciel.datecharg) In (select max(datecharg) from TBLclientlogiciel    GROUP BY fknumcli)) AND ((TBLclientlogiciel.FKlogiciel)="ACCESS"))
    ORDER BY TBLclientlogiciel.FKnumcli;
    Le résultat que j'obtiens est presque bon, sauf que pour certains clients, il me sort deux versions différentes, je ne vois pas pourquoi.

    Si vous pouvez m'aider encore svp.

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    96
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 96
    Points : 52
    Points
    52
    Par défaut
    normal qu'il te sorte plusieurs versions car tu ne fais aucune sélection sur les versions!!! il faudrai rajouter un select max (version)!! Je regarde ca!!!

    EDIT:
    essaie ca, c'est nettement plus simple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT [fknumcli], max([fkversion]), [fklogiciel], max([datecharge])
    FROM TBLclientlogiciel
    WHERE datecharge is not null
    GROUP BY [fklogiciel], [fknumcli]
    ORDER BY [fknumcli];

    et la il te le sorts pour plusieurs logiciels!!
    Si tu veux qu'il te sorte ca pour un logiciel uniquement rajoute une condition dans le where du style fklogiceil="Excel"

    Si ce n'est pas bon, explique mieux ce que tu veux car je ne comprends pas!!!
    ++

  10. #10
    Membre à l'essai
    Inscrit en
    Février 2005
    Messages
    41
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 41
    Points : 20
    Points
    20
    Par défaut
    Exact, ca fonctionne comme ça, Enfin ca a l'air a vue d'oeil.

    Merci beaucoup.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [SQL Server] select max d'un count ?
    Par chess75 dans le forum Langage SQL
    Réponses: 10
    Dernier message: 28/08/2017, 14h38
  2. [2008R2] Requete Select MAX et Select TOP 1 DESC
    Par guigui69 dans le forum Développement
    Réponses: 5
    Dernier message: 21/03/2014, 16h52
  3. [SQL Server] select max ne retourne pas la bonne valeur
    Par *alexandre* dans le forum Langage SQL
    Réponses: 7
    Dernier message: 29/09/2008, 14h49
  4. [SQL] Requete SELECT un peu confuse
    Par benoitinfrance dans le forum PHP & Base de données
    Réponses: 46
    Dernier message: 02/08/2006, 22h04
  5. Pb SQL Requete selection
    Par flagfight dans le forum Requêtes et SQL.
    Réponses: 15
    Dernier message: 18/05/2006, 16h40

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo