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

Access Discussion :

date la plus ancienne sur une requete


Sujet :

Access

  1. #1
    Membre régulier Avatar de omen123
    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Septembre 2015
    Messages
    370
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Allemagne

    Informations professionnelles :
    Activité : Technicien Help Desk
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Septembre 2015
    Messages : 370
    Points : 109
    Points
    109
    Par défaut date la plus ancienne sur une requete
    bonjour a tous ,

    je me confronte aujourd'hui avec un probleme de requete . je voudrai avoir la date la plus ancienne au niveau de la requete .par exemple :

    - CLT 1 DATE 01/01/2024
    - CLT 1 DATE 01/02/2024
    - CLT 1 DATE 01/03/2024

    Le resultat doit me renvoyer la valeur : 01/01/2024 .

    dans le deuxieme cas qui m'est problematique :

    - CLT 1 DATE 01/01/2024
    - CLT 1 DATE 01/02/2024
    - CLT 1 DATE 01/05/2024
    - CLT 1 DATE 01/06/2024

    Le resultat doit me renvoyer la valeur : 01/05/2024 .

    ou un autre exemple :

    - CLT 1 DATE 01/01/2024
    - CLT 1 DATE 01/02/2024
    - CLT 1 DATE 01/05/2024
    - CLT 1 DATE 01/06/2024
    - CLT 1 DATE 01/07/2024
    - CLT 1 DATE 01/09/2024
    - CLT 1 DATE 01/10/2024

    le resultat doit me renvoyer la valeur 01/09/2024 , je chrche toujours la derniere date d'entré chez mois sans inteeruption ( sans sortie du client ).

    le champ CLT1 est nommé chez moi "CFR" et le champ date est nomé "datef" .

    merci d avance .
    Aux incompétents je dis merci ,grâce à vous je progresse !

  2. #2
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 095
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 095
    Points : 24 742
    Points
    24 742
    Par défaut
    Bonjour,

    La première ok je comprend. c'est la plus ancienne.

    Mais les autres ?

    Si ta date en Text tu devrais utiliser une fonction de conversion String > Date sinon je doute qu'un tri quelconque soit efficace.

    Cordialement,
    Détecter les modifications formulaire Cloud storage et ACCESS
    Classe MELA(CRUD) Opérateur IN et zone de liste Opérateur LIKE
    Visitez mon Blog
    Les questions techniques par MP ne sont pas lues et je ne pratique pas la bactériomancie

  3. #3
    Membre régulier Avatar de omen123
    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Septembre 2015
    Messages
    370
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Allemagne

    Informations professionnelles :
    Activité : Technicien Help Desk
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Septembre 2015
    Messages : 370
    Points : 109
    Points
    109
    Par défaut
    rebonjour ,

    j'ai modifié le type champ "datef" de text ---> a date .

    mon but de la requete c est d 'avoir la derniere date d'affection de mon portefeuille et ce depuis 2023 . si un client sort du ptf , la date affection sera la derniere date d'entrée .
    Aux incompétents je dis merci ,grâce à vous je progresse !

  4. #4
    Membre régulier Avatar de omen123
    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Septembre 2015
    Messages
    370
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Allemagne

    Informations professionnelles :
    Activité : Technicien Help Desk
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Septembre 2015
    Messages : 370
    Points : 109
    Points
    109
    Par défaut
    rebonjour Loufab ,

    j'ai mis une piece jointe pour mieux expliquer mon cas , dans ce cas le client est sorti a partir du :

    - le 01/06/2023
    - puis01/04/2024

    la requete doir pouvoir me renvoyer la derniere date de sortie .
    Fichiers attachés Fichiers attachés
    Aux incompétents je dis merci ,grâce à vous je progresse !

  5. #5
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 308
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 308
    Points : 13 059
    Points
    13 059
    Par défaut
    Bonjour,
    Si j'ai bien compris la demande, il faut:
    1. Prendre toutes les dates pour lesquelles il n'en existe pas d'autre avec un mois de moins
    2. Prendre la date la plus récente dans cette liste.

    Donc avec une sous requête, ça ressemble à ceci:
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    select *
    from 
    (
    select query.CodeCli,Max(LaDate) as LaDAte
    from LaTable as l1
    left outer join LaTable as l2
    on l1.CodeCli = l2.CodeCli and DateAdd('m',-1,l1.LaDate) = l2.LaDate
    where l2.CodeCli is null
    ) as query
    group by query.CodeCli

    A tester quand même, mais l'idée est là.

    Tatayo.

  6. #6
    Membre régulier Avatar de omen123
    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Septembre 2015
    Messages
    370
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Allemagne

    Informations professionnelles :
    Activité : Technicien Help Desk
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Septembre 2015
    Messages : 370
    Points : 109
    Points
    109
    Par défaut
    Merci TATAYO ,

    j'ai recopier le code est remplacer les titulaires ,je pense que je dois rectifié

    Nom : FORUM PN.png
Affichages : 75
Taille : 22,7 Ko
    Aux incompétents je dis merci ,grâce à vous je progresse !

  7. #7
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 308
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 308
    Points : 13 059
    Points
    13 059
    Par défaut
    Oups, j'ai fait une boulette dans la requête:
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    select query.CodeCli,Max(query.LaDate) as LaDAte
    from 
    (
    select l1.CodeCli, l1.LaDate
    from LaTable as l1
    left outer join LaTable as l2
    on l1.CodeCli = l2.CodeCli and DateAdd('m',-1,l1.LaDate) = l2.LaDate
    where l2.CodeCli is null
    ) as query
    group by query.CodeCli

    Ca m'apprendra à faire plusieurs choses en même temps...

    Tatayo.

  8. #8
    Membre régulier Avatar de omen123
    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Septembre 2015
    Messages
    370
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Allemagne

    Informations professionnelles :
    Activité : Technicien Help Desk
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Septembre 2015
    Messages : 370
    Points : 109
    Points
    109
    Par défaut
    rebonjour TATAYO ,

    juste pour confirmation , je dois changer :

    - CodeCli --> CLT (identifiant client unique)
    - LaDate --> Datef (ces les dates d'affectation)
    - latable --> DATEAFFEC ( c'est le nom de ma table)

    je crois qu il y a un caractere de plus

    Nom : 5F.png
Affichages : 74
Taille : 46,0 Ko

    Nom : 4 F.png
Affichages : 72
Taille : 43,0 Ko
    Aux incompétents je dis merci ,grâce à vous je progresse !

  9. #9
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 308
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 308
    Points : 13 059
    Points
    13 059
    Par défaut
    Je viens de regarder l'aide en ligne de DateAdd(), il faut en fait utiliser des doubles-quotes, et non de simples-quotes comme avec les autres SGBDs.

    Tatayo.

  10. #10
    Membre régulier Avatar de omen123
    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Septembre 2015
    Messages
    370
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Allemagne

    Informations professionnelles :
    Activité : Technicien Help Desk
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Septembre 2015
    Messages : 370
    Points : 109
    Points
    109
    Par défaut
    il renvoie toujours le meme message .j'ai la base en piece jointe en cas de besoin.
    Fichiers attachés Fichiers attachés
    Aux incompétents je dis merci ,grâce à vous je progresse !

  11. #11
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 308
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 308
    Points : 13 059
    Points
    13 059
    Par défaut
    Visiblement Access ne supporte pas les sous requêtes dans la clause From, donc j'avoue que je n'ai pas de solution.

    Tatayo.

  12. #12
    Membre régulier Avatar de omen123
    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Septembre 2015
    Messages
    370
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Allemagne

    Informations professionnelles :
    Activité : Technicien Help Desk
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Septembre 2015
    Messages : 370
    Points : 109
    Points
    109
    Par défaut
    Dans tous les cas un grand MERCI
    Aux incompétents je dis merci ,grâce à vous je progresse !

  13. #13
    Membre régulier Avatar de omen123
    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Septembre 2015
    Messages
    370
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Allemagne

    Informations professionnelles :
    Activité : Technicien Help Desk
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Septembre 2015
    Messages : 370
    Points : 109
    Points
    109
    Par défaut
    bonjour ,

    pouvez vous svp me localiser l'erreur :

    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
    WITH DateEntries AS (
        SELECT 
            CLT,
            datef,
            LAG(datef) OVER (PARTITION BY CLT ORDER BY datef) AS PrevDate
        FROM 
            DATEAFFEC
    ),
    Interruptions AS (
        SELECT 
            CLT,
            datef,
            PrevDate,
            IIF(DATEDIFF("m", PrevDate, datef) > 1, 1, 0) AS IsInterrupted
        FROM 
            DateEntries
    )
    SELECT 
        CLT,
        IIF(SUM(IsInterrupted) > 0, MIN(datef), MAX(datef)) AS DerniereDateEntree
    FROM 
        Interruptions
    GROUP BY 
        CLT;
    Aux incompétents je dis merci ,grâce à vous je progresse !

  14. #14
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 308
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 308
    Points : 13 059
    Points
    13 059
    Par défaut
    Access ne supporte pas les sous-requête ni les CTE.
    Quelle est la base de données utilisée ?

    Tatayo.

  15. #15
    Membre régulier Avatar de omen123
    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Septembre 2015
    Messages
    370
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Allemagne

    Informations professionnelles :
    Activité : Technicien Help Desk
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Septembre 2015
    Messages : 370
    Points : 109
    Points
    109
    Par défaut
    j'utilise acces 2013, je pourrai pas faire par exemple une requete sur une autre requete ...
    Aux incompétents je dis merci ,grâce à vous je progresse !

  16. #16
    Membre expert
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Octobre 2012
    Messages
    1 881
    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 881
    Points : 3 471
    Points
    3 471
    Par défaut
    Bonjour omen123, tatayo, loufab,

    Pour contourner la non disponibilité des CTE une fonction peu faire l'affaire. Dans mon exemple je suppose que le "step" est toujours d'un mois pour la continuité du portefeuille. Dans un module standard le code suivant:
    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
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    Public Function LastDate(sIdentifiant As String) As Date
    On Error GoTo gestion_err
     
    'Déclaration des variables
        Dim db As DAO.Database: Set db = CurrentDb
        Dim rst As DAO.Recordset
        Dim strSQL As String
        Dim daDate As Date
     
    'Construction du SQL en fonction du paramêtre sIdentifiant
        strSQL = "SELECT DATEAFFEC.CLT, DATEAFFEC.datef " _
        & "FROM DATEAFFEC " _
        & "WHERE DATEAFFEC.CLT = """ & sIdentifiant & """" _
        & "ORDER BY DATEAFFEC.datef DESC;"
    'Ouverture du record
        Set rst = db.OpenRecordset(strSQL, 4, 512)
    'Affectation de la date la plus récente
        daDate = rst("datef")
    'Parcours des dates jusqu'au premier espace
        Do While Not rst.EOF
            If DateDiff("m", rst("datef"), daDate) > 1 Then: Exit Do
            daDate = rst("datef")
            rst.MoveNext
        Loop
    'Retour de la date désirée
        LastDate = daDate
     
    Sortie:
    rst.Close
    Set rst = Nothing
    Set db = Nothing
     
    Exit Function
    gestion_err:
        MsgBox Err.Number & Chr(13) & Err.Description
        Resume Sortie
    End Function
    Et la requête selon la table mise en pièce jointe dans le post # 10

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT DATEAFFEC.CLT, LastDate([CLT]) AS DerniereDate
    FROM DATEAFFEC
    GROUP BY DATEAFFEC.CLT;
    
    Bonne journée
    Ce qui se conçoit bien s’énonce clairement et les mots pour le dire arrivent aisément. Nicolas Boileau
    Si tout est OK, n'oubliez pas de cliquer sur

  17. #17
    Membre régulier Avatar de omen123
    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Septembre 2015
    Messages
    370
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Allemagne

    Informations professionnelles :
    Activité : Technicien Help Desk
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Septembre 2015
    Messages : 370
    Points : 109
    Points
    109
    Par défaut
    je crois que ca fonctionne ,et dire que je commencais a le faire manuellement pour plus de 200 milles clients.

    je te remercie infinement , je verified'autre exemples et je te communequerai le sort de la requete .

    PS : Dans mon exemple je suppose que le "step" est toujours d'un mois pour la continuité du portefeuille (parfois le client sort du PTF deux ou plusieurs mois )
    Aux incompétents je dis merci ,grâce à vous je progresse !

  18. #18
    Membre régulier Avatar de omen123
    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Septembre 2015
    Messages
    370
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Allemagne

    Informations professionnelles :
    Activité : Technicien Help Desk
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Septembre 2015
    Messages : 370
    Points : 109
    Points
    109
    Par défaut
    Bonjour Robert,

    je crois qu'on modifiant le code sur ma base operationnel , j'ai fais une fausse manip . j'ai peut etre loupé klk chose

    le nom de la table : complet
    identifiant client : CFR
    date effectation : Date 2

    j'ai mis les codes suivants :



    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
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    Public Function LastDate(sIdentifiant As String) As Date
    On Error GoTo gestion_err
     
    'Déclaration des variables
        Dim db As DAO.Database: Set db = CurrentDb
        Dim rst As DAO.Recordset
        Dim strSQL As String
        Dim daDate As Date
     
    'Construction du SQL en fonction du paramêtre sIdentifiant
        strSQL = "SELECT complet.CFR, complet.date2 " _
        & "FROM complet" _
        & "WHERE complet.CFR = """ & sIdentifiant & """" _
        & "ORDER BY complet.date2 DESC;"
    'Ouverture du record
        Set rst = db.OpenRecordset(strSQL, 4, 512)
    'Affectation de la date la plus récente
        daDate = rst("date2")
    'Parcours des dates jusqu'au premier espace
        Do While Not rst.EOF
            If DateDiff("m", rst("date2"), daDate) > 1 Then: Exit Do
            daDate = rst("date2")
            rst.MoveNext
        Loop
    'Retour de la date désirée
        LastDate = daDate
     
    Sortie:
    rst.Close
    Set rst = Nothing
    Set db = Nothing
     
    Exit Function
    gestion_err:
        MsgBox Err.Number & Chr(13) & Err.Description
        Resume Sortie
    End Function
    le code de la requete SQL

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT complet.CFR, LastDate([CFR]) AS DerniereDate
    FROM complet
    GROUP BY complet.CFR;

    Quand j'execute la requete j'ai les deux message en bas , le test sur l'application de test fonctionne parfaitement :
    Images attachées Images attachées   
    Aux incompétents je dis merci ,grâce à vous je progresse !

  19. #19
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 308
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 308
    Points : 13 059
    Points
    13 059
    Par défaut
    Il manque les espaces à la fin les chaînes lors de la construction de la requête (ligne 12 et peut-être 13).

    Tatayo.

  20. #20
    Membre régulier Avatar de omen123
    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Septembre 2015
    Messages
    370
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Allemagne

    Informations professionnelles :
    Activité : Technicien Help Desk
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Septembre 2015
    Messages : 370
    Points : 109
    Points
    109
    Par défaut
    effectivement il 's'agit dun espace , je continue mes test et je te tienderai au courant .
    merci bcp
    Aux incompétents je dis merci ,grâce à vous je progresse !

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [AC-2019] Trouver la date la plus ancienne dans une Table
    Par Superpat9999 dans le forum VBA Access
    Réponses: 2
    Dernier message: 04/01/2023, 13h39
  2. [LibreOffice][Base de données] Sélectionner le date la plus récente dans une requête via une table
    Par Zhebulon dans le forum OpenOffice & LibreOffice
    Réponses: 2
    Dernier message: 17/04/2018, 10h00
  3. [XL-2007] Recherche date la plus récente sur une base de données
    Par BERRACHED SAID dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 20/03/2017, 17h35
  4. Select la date la plus ancienne dans une liste
    Par hadakamatcho dans le forum Langage SQL
    Réponses: 3
    Dernier message: 05/09/2012, 10h52
  5. recherche de la date la plus récente dans une requete
    Par isabelle b dans le forum Requêtes et SQL.
    Réponses: 9
    Dernier message: 17/05/2008, 18h30

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