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 :

Maximum d'un champ contenant une date [AC-2010]


Sujet :

Requêtes et SQL.

  1. #1
    Futur Membre du Club
    Homme Profil pro
    controle de gestion
    Inscrit en
    Septembre 2013
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : controle de gestion

    Informations forums :
    Inscription : Septembre 2013
    Messages : 12
    Points : 8
    Points
    8
    Par défaut Maximum d'un champ contenant une date
    Bonjour,

    J'ai crée une requête sous Access dont le résultat est affiché dans la pièce jointe, mais il y a un critère que je n'arrive pas à déterminer :

    Comment puis-je n'afficher que les lignes dont la date est la plus récente sur mon champ "périodetarif" dans ma requête, en fonction du champ "codechantier" qui est unique ?

    Merci de toutes les réponses que vous pourriez m'apporter !!!!!
    Images attachées Images attachées  

  2. #2
    Rédacteur/Modérateur

    Avatar de User
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    8 370
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 8 370
    Points : 19 773
    Points
    19 773
    Billets dans le blog
    65
    Par défaut
    Salut,

    Tu peux faire une sous-requêtes qui va renvoyer les dates maximum en utilisant Max(périodetarif) et tu mets cette requête comme critère de ta requête principale :

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    select * from TaTable where périodetarif In (select Max(périodetarif) From TaTable)

  3. #3
    Futur Membre du Club
    Homme Profil pro
    controle de gestion
    Inscrit en
    Septembre 2013
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : controle de gestion

    Informations forums :
    Inscription : Septembre 2013
    Messages : 12
    Points : 8
    Points
    8
    Par défaut
    Tout d'abord merci pour la réponse,

    Je ne suis pas trop connaisseur en Access j'ai donc suivi les instructions en collant votre code dans un champ de ma requête. Il m'a demandé de mettre des parenthèses j'ai donc corrigé le code en mettant le suivant :

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    (SELECT * 
    FROM [PlansFacturation] 
    WHERE PériodeTarif IN (SELECT Max(PériodeTarif) FROM [PlansFacturation]))
    Il me met maintenant un message d'erreur que j'ai mis en pièce jointe. Je ne sais pas trop comment corriger cela car je ne comprend pas tout à fait déjà le code que j'ai collé...
    Merci à vous, bonne journée !!
    Images attachées Images attachées  

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2013
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2013
    Messages : 20
    Points : 25
    Points
    25
    Par défaut
    Passe en mode SQL (bouton droit sur le nom de ta requête puis Mode SQL), tu devrais avoir quelque chose du genre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT [...] PrixVente, VentilMarge, PosteRent FROM PlansFacturation INNER JOIN [...] WHERE PrixVente <> 0 And VentilMarge <> 0 [...]

    Rajoute dans le WHERE:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WHERE [...] And périodetarif IN (SELECT Max(périodetarif) FROM TaTable)

  5. #5
    Futur Membre du Club
    Homme Profil pro
    controle de gestion
    Inscrit en
    Septembre 2013
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : controle de gestion

    Informations forums :
    Inscription : Septembre 2013
    Messages : 12
    Points : 8
    Points
    8
    Par défaut
    Bonjour, merci pour cette réponse complémentaire mais j'ai encore un petit soucis avec cette requête :
    J'ai collé le code que tu m'as indiqué cela donne donc ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT PlansFacturation.CodeClient, PlansFacturation.CodeChantier, Clients.CodeAgence, Chantiers.CodeAgence, Clients.DateEntree, Clients.DateSortie, Chantiers.DateDebut, Chantiers.DateFin, PlansFacturation.Quantite, PlansFacturation.PrixVente, PlansFacturation.VentilMarge, PlansFacturation.PosteRent
    FROM (Chantiers INNER JOIN PlansFacturation ON (PlansFacturation.CodeChantier = Chantiers.CodeChantier) AND (PlansFacturation.CodeAffaire = Chantiers.CodeAffaire) AND (Chantiers.CodeClient = PlansFacturation.CodeClient)) INNER JOIN Clients ON (Chantiers.CodeClient = Clients.Code) AND (PlansFacturation.CodeClient = Clients.Code)
    WHERE (((PlansFacturation.PrixVente)<>0) AND ((PlansFacturation.VentilMarge)<>0)) AND PériodeTarif IN (SELECT Max(PériodeTarif) FROM PlansFacturation)
    Par contre il me demande de renseigner une valeur de paramètre dans périodetarif lorsque je lance la requête....
    Merci et bonne fin de journée !

  6. #6
    Responsable Arduino et Systèmes Embarqués


    Avatar de f-leb
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2009
    Messages
    12 742
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 12 742
    Points : 57 547
    Points
    57 547
    Billets dans le blog
    42
    Par défaut
    bonsoir,

    Citation Envoyé par vincent3556 Voir le message
    Comment puis-je n'afficher que les lignes dont la date est la plus récente sur mon champ "périodetarif" dans ma requête, en fonction du champ "codechantier" qui est unique ?
    pile-poil ce qu'il te faut

  7. #7
    Futur Membre du Club
    Homme Profil pro
    controle de gestion
    Inscrit en
    Septembre 2013
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : controle de gestion

    Informations forums :
    Inscription : Septembre 2013
    Messages : 12
    Points : 8
    Points
    8
    Par défaut
    Bonjour,

    Je reviens sur mon sujet un peu tard car j'étais sur autre chose. Par contre ce n'est pas vraiment pile poil ce qu'il me faut car en fonction du code chantier, les dates maximum varient !! donc je ne peut pas renseigner une valeur de paramètres car cela dépend des cas...
    Merci,

  8. #8
    Membre éclairé Avatar de dumas.blr
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juin 2010
    Messages
    598
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2010
    Messages : 598
    Points : 879
    Points
    879
    Par défaut
    Bonjour,

    Je te proposerais de faire une requête de type
    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
    SELECT plansfacturation.codeclient, 
           plansfacturation.codechantier, 
           clients.codeagence, 
           chantiers.codeagence, 
           clients.dateentree, 
           clients.datesortie, 
           chantiers.datedebut, 
           chantiers.datefin, 
           plansfacturation.quantite, 
           plansfacturation.prixvente, 
           plansfacturation.ventilmarge, 
           plansfacturation.posterent 
    FROM   (chantiers 
            INNER JOIN(SELECT codechantier, 
                              Max(périodetarif) 
                       FROM   plansfacturation 
                       GROUP  BY codechantier) a 
                    ON chantiers.codechantier = a.codechantier 
            INNER JOIN plansfacturation 
                    ON ( plansfacturation.codechantier = chantiers.codechantier ) 
                       AND ( plansfacturation.codeaffaire = chantiers.codeaffaire ) 
                       AND ( chantiers.codeclient = plansfacturation.codeclient )) 
           INNER JOIN clients 
                   ON ( chantiers.codeclient = clients.code ) 
                      AND ( plansfacturation.codeclient = clients.code ) 
    WHERE  ( ( ( plansfacturation.prixvente ) <> 0 ) 
             AND ( ( plansfacturation.ventilmarge ) <> 0 ) )
    Pour cela, il te suffit de rajouter la requete qui te permet de trouver la date maxi par chantier (la partie que j'ai mis en rouge dans la requete

  9. #9
    Futur Membre du Club
    Homme Profil pro
    controle de gestion
    Inscrit en
    Septembre 2013
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : controle de gestion

    Informations forums :
    Inscription : Septembre 2013
    Messages : 12
    Points : 8
    Points
    8
    Par défaut
    Bonjour,

    Merci de ta réponse mais il me met le message d'erreur que j'ai mis en pièce jointe quand j’exécute la requête. J'ai essayé de bidouiller pour que ça fonctionne mais vu que je ne comprends pas forcément comment cette requete marche c'est un peu compliqué...
    Merci, bonne journée,
    Images attachées Images attachées  

  10. #10
    Membre éclairé Avatar de dumas.blr
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juin 2010
    Messages
    598
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2010
    Messages : 598
    Points : 879
    Points
    879
    Par défaut
    Bonjour,

    Je te conseille alors de passer par une étape intermédiaire:
    Utilise le mode création de requête pour créer le select dans une nouvelle requête, puis rajoute celle-ci dans ta requête finale en utilisant une jointure interne sur le code chantier.

  11. #11
    Futur Membre du Club
    Homme Profil pro
    controle de gestion
    Inscrit en
    Septembre 2013
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : controle de gestion

    Informations forums :
    Inscription : Septembre 2013
    Messages : 12
    Points : 8
    Points
    8
    Par défaut
    Bonjour,

    Le truc c'est que je n'arrive même pas à ressortir tout simplement la max de la période tarif pour un code chantier. J'avais déjà essayé de faire une requête comme j'ai mis en pièce jointe mais ça ne veut pas fonctionner, je m'arrache les cheveux pour un truc qui même débutant en Access devrait être super simple à réaliser...
    Bonne journée !
    Images attachées Images attachées  

  12. #12
    Membre éclairé Avatar de dumas.blr
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juin 2010
    Messages
    598
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2010
    Messages : 598
    Points : 879
    Points
    879
    Par défaut
    normal, Pour sortir un max, il faut impérativement une fonction d'agrégat.

    Utilise la fonctionnalité "totaux" dans le générateur de requête (clic-droit dans la partie inférieure, là où il y a la liste des champs)

  13. #13
    Futur Membre du Club
    Homme Profil pro
    controle de gestion
    Inscrit en
    Septembre 2013
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : controle de gestion

    Informations forums :
    Inscription : Septembre 2013
    Messages : 12
    Points : 8
    Points
    8
    Par défaut
    C'était donc juste ça qui me bloquait........
    En tout cas merci à tous de m'avoir aidé j'en ai terminé avec ça !!
    bonne journée !

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

Discussions similaires

  1. trie par champ contenant une date
    Par kaleo dans le forum Linux
    Réponses: 4
    Dernier message: 29/03/2010, 15h07
  2. Réponses: 2
    Dernier message: 26/12/2008, 15h59
  3. Récupérer le maximum de 2 champs dans une requete SQL
    Par FrédéricCM dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 11/07/2006, 11h15
  4. Réponses: 2
    Dernier message: 19/04/2006, 11h29
  5. Réponses: 6
    Dernier message: 18/04/2006, 13h11

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