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 :

Critère d'apparition en fonction d'un historique


Sujet :

Requêtes et SQL.

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Février 2014
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2014
    Messages : 5
    Points : 2
    Points
    2
    Par défaut Critère d'apparition en fonction d'un historique
    Bonjour,

    La table que j'utilise comporte les éléments suivant
    VOL_Année
    VOL_Mois
    VOL_Volume
    VOL_Outil

    Les volumes sont inscrits sur plusieurs années, on a donc rapidement beaucoup de volume par outil.

    Je souhaiterais faire apparaitre dans une requête les volumes correspondant à la première année complète (pas civile mais de mois année n à mois année n+1)

    Pour le moment, je test avec un critère VraiFaux, mais je n'arrive pas faire fonctionner.

    Merci pour vos conseils avisés.

  2. #2
    Rédacteur/Modérateur

    Avatar de ClaudeLELOUP
    Homme Profil pro
    Chercheur de loisirs (ayant trouvé tous les jours !)
    Inscrit en
    Novembre 2006
    Messages
    20 596
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 79
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de loisirs (ayant trouvé tous les jours !)
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 596
    Points : 281 917
    Points
    281 917
    Par défaut
    Bonjour et bienvenue parmi nous.

    Dans ta requête, crée une colonne
    AnnéeMois: [VOL_Année] & [VOL_Mois]

    et dans critère :

    >1302 et <1402

    Pour sélectionner de février 2013 à janvier 2014 inclus.

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Février 2014
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2014
    Messages : 5
    Points : 2
    Points
    2
    Par défaut
    Merci pour ta réponse

    Je viens de faire ce que tu me proposes.

    Le problème est que la colonne nouvellement crée est interprété en chiffre par Access.
    Donc si je demande les dates supérieures au 20181 (car les mois sont dans une table liée avec que les mois dedans, avec un numéro auto comme clé allant de 1 à 12), il me met les données de 201410 (soit octobre 2014).

    Autrement, le problème est le suivant :
    avec cette proposition, selon mes outils, les premiers volumes peuvent être inscrit en 2014 ou 2017 par exemple. C'est pour cela que j essayais de construire une formule conditionnée faisant référence à l'année. L'idéal serait de détecter la première donnée crée par outil de d'inscrire les 11 suivantes (car si une donnée est créée, il y aura forcément une donnée crée tous les mois suivant).

  4. #4
    Rédacteur/Modérateur

    Avatar de ClaudeLELOUP
    Homme Profil pro
    Chercheur de loisirs (ayant trouvé tous les jours !)
    Inscrit en
    Novembre 2006
    Messages
    20 596
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 79
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de loisirs (ayant trouvé tous les jours !)
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 596
    Points : 281 917
    Points
    281 917
    Par défaut
    Le problème est que la colonne nouvellement crée est interprété en chiffre par Access.
    Donc si je demande les dates supérieures au 20181 (car les mois sont dans une table liée avec que les mois dedans, avec un numéro auto comme clé allant de 1 à 12), il me met les données de 201410 (soit octobre 2014).

    ta colonne devient :

    AnnéeMois: CChaîne([VOL_Année]) & Format([VOL_Mois];"0#")



    L'idéal serait de détecter la première donnée crée par outil de d'inscrire les 11 suivantes (car si une donnée est créée, il y aura forcément une donnée crée tous les mois suivant).
    Je n'ai pas compris !

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Février 2014
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2014
    Messages : 5
    Points : 2
    Points
    2
    Par défaut
    Ok, ça marche pour la nouvelle formule.
    Par curiosité, l'intitulé CChaîne sert à quoi ?

    Pour le deuxième point :
    J'essaye de clarifier mon propos.
    Avec ce que tu me proposes (qui fonctionne bien, merci beaucoup) je dois sélectionner des dates début et fin où je suis sur que tous mes outils ont des volumes inscrits. Il s'avère que certains seront actifs en 2014, d'autres en 2018, mais je souhaite que 12 mois consécutifs pour chaque.
    Donc, avec ta proposition je mets la date la plus lointaine en l’occurrence (mais qui risque d'évoluer).
    L'idéal serait de détecter la première donnée inscrite pour un outil (peu importe l'année et le mois) et de sélectionner les 11 données suivantes.
    L'outil 1 débute en mars 2014, la requête m'affiche les volumes de mars 2014 à février 2015 inclus, alors que dans ma table les volumes seront existant sur les années suivantes.
    L'outil 2 débute en janvier 2018, la requête m'affiche les volumes de janvier 2018 à décembre 2018.

    En espérant être plus clair.

  6. #6
    Rédacteur/Modérateur

    Avatar de ClaudeLELOUP
    Homme Profil pro
    Chercheur de loisirs (ayant trouvé tous les jours !)
    Inscrit en
    Novembre 2006
    Messages
    20 596
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 79
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de loisirs (ayant trouvé tous les jours !)
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 596
    Points : 281 917
    Points
    281 917
    Par défaut
    Par curiosité, l'intitulé CChaîne sert à quoi ?
    C'est l'équivalent français de Cstr()

    Pour te documenter :

    ---------

    D'une manière générale, pour se documenter sur les propriétés d'un formulaire ou d'un état, ou de leurs contrôles :
    - afficher l'objet en mode construction ;
    - cliquer sur la propriété => elle se met en surbrillance ;
    - enfoncer la touche <F1>
    => l'aide Access s'ouvre à la bonne page.
    De même dans le code, placer le curseur de la souris et enfoncer F1.
    On peut aussi :
    • ouvrir l'aide <F1>, choisir l'onglet « Aide intuitive » et suivre les instructions ;
    • ouvrir la fenêtre d'exécution (<Ctrl> + G), saisir un mot-clé, y placer le curseur de la souris et enfoncer F1.


    N.B. Pour trouver l'équivalent anglais d'une fonction dans une requête, tu examines son SQL

    En l'occurrence :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT CStr([VOL_Année]) & Format([VOL_Mois],"0#") AS AnnéeMois
    FROM tst;
    -------------------------------------

    L'idéal serait de détecter la première donnée inscrite pour un outil (peu importe l'année et le mois) et de sélectionner les 11 données suivantes.
    L'outil 1 débute en mars 2014, la requête m'affiche les volumes de mars 2014 à février 2015 inclus, alors que dans ma table les volumes seront existant sur les années suivantes.
    L'outil 2 débute en janvier 2018, la requête m'affiche les volumes de janvier 2018 à décembre 2018.

    Je ne vois pas comment produire ce résultat dans une requête unique.

    Tu devrais plutôt t'orienter vers un formulaire qui te permettrait de choisir un outil (zone de liste modifiable) et qui afficherait les 12 mois pour cet outil.

  7. #7
    Candidat au Club
    Profil pro
    Inscrit en
    Février 2014
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2014
    Messages : 5
    Points : 2
    Points
    2
    Par défaut
    OK

    Merci beaucoup

  8. #8
    Membre expert
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Octobre 2012
    Messages
    1 874
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2012
    Messages : 1 874
    Points : 3 461
    Points
    3 461
    Par défaut
    Bonjour jimos22, Claude,

    L'idéal serait de détecter la première donnée inscrite pour un outil (peu importe l'année et le mois) et de sélectionner les 11 données suivantes.
    Un Select Top 11 te retournerais les 11 premiers enregistrements. Tu fais un Order by et je crois que ça devrait faire ce que tu veux. Plus besoin de choisir de dates, la requête va te retourner les enregistrements comme tu veux.

    Bonne journée

  9. #9
    Rédacteur/Modérateur

    Avatar de ClaudeLELOUP
    Homme Profil pro
    Chercheur de loisirs (ayant trouvé tous les jours !)
    Inscrit en
    Novembre 2006
    Messages
    20 596
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 79
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de loisirs (ayant trouvé tous les jours !)
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 596
    Points : 281 917
    Points
    281 917
    Par défaut
    Bonjour,

    Robert, j'ai compris que c'est pour chaque outil, qu'il faut les 12 enregistrements avec les plus petites dates. Donc une requête qui ramème
    (12 x nbre d'outils) enregistrements.
    J'ignore si c'est possible avec une seule requête.

    Si un virtuose du SQL pouvait passer par ici...
    Sinon en VBA une boucle sur chaque outil pour alimenter une nouvelle table.

  10. #10
    Membre expert
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Octobre 2012
    Messages
    1 874
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2012
    Messages : 1 874
    Points : 3 461
    Points
    3 461
    Par défaut
    Bonjour Claude, jimos22,

    Tu as raison Claude je n'avais pas bien lu!

    Une solution qui reprend un peu ce que tu disais est la suivante: Une fonction Public dans un module.
    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
    Public Function RecupOutil(loOutil As Long) As String
     
        Dim db As DAO.Database: Set db = CurrentDb
        Dim rst As DAO.Recordset
        Dim SQL As String
        Dim i As Integer
        SQL = "SELECT TOP 12 T_Vol.VOL_OUTIL, CStr([VOL_ANNEE]) & Format([VOL_MOIS],'00') AS AnneeMois FROM T_Vol " _
        & "WHERE (((T_Vol.VOL_OUTIL) =" & loOutil & ")) ORDER BY CStr([VOL_ANNEE]) & Format([VOL_MOIS],'00');"
        Set rst = db.OpenRecordset(SQL)
            While rst.EOF = False
                RecupOutil = RecupOutil & rst("AnneeMois") & ";"
                rst.MoveNext
            Wend
            RecupOutil = Left(RecupOutil, Len(RecupOutil) - 1)
        rst.Close
        Set rst = Nothing
        Set db = Nothing
     
    End Function
    Et une requête basé sur cette fonction retournerait dans un seul champ les bonnes dates, séparée par des ;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT T_Vol.VOL_OUTIL, RecupOutil([VOL_OUTIL]) AS Resultat
    FROM T_Vol
    GROUP BY T_Vol.VOL_OUTIL, RecupOutil([VOL_OUTIL]);
    On peut ainsi, si besoin, traiter le résultat comme un tableau avec la fonction Split.

    En espérant que ça puisse t'aider.

Discussions similaires

  1. Réponses: 1
    Dernier message: 18/11/2014, 12h42
  2. Fonction Load et Historique navigateur
    Par facilus68 dans le forum jQuery
    Réponses: 2
    Dernier message: 06/09/2013, 16h58
  3. [AC-2007] Critère de requête en fonction d'une autre requete
    Par tomatotep dans le forum IHM
    Réponses: 5
    Dernier message: 10/09/2012, 11h33
  4. [XL-2003] récupérer les critères d'un filtre (fonction autofilter)
    Par flobuzz dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 08/11/2011, 18h58
  5. critère de sélection et fonctions d'agrégat
    Par kouassi_denis dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 18/08/2008, 12h42

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