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 :

avant dernier d'une liste


Sujet :

Access

  1. #1
    Membre régulier
    Inscrit en
    Mai 2005
    Messages
    130
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 130
    Points : 71
    Points
    71
    Par défaut avant dernier d'une liste
    bonjour à tous,

    j'ai une table avec dedans par exemple:

    bug_id------date_modified--------------old_value-------new_value

    7------------13/01/2005 19:25:08-------10--------------30
    7------------18/01/2005 17:48:30-------30--------------45
    7------------24/02/2005 16:18:32-------45--------------80
    7------------04/03/2005 12:48:13-------80--------------90
    10----------13/01/2005 19:23:20--------10-------------20
    10----------25/01/2005 10:20:11--------20-------------40
    10----------25/01/2005 10:21:40--------40-------------80
    10----------12/07/2005 09:32:16--------80-------------90

    je voudrais récupérer l'avant dernière de chaque bug_id
    donc ça:

    7------------24/02/2005 16:18:32-------45--------------80
    10----------25/01/2005 10:21:40--------40-------------80

    mais je n'arrive qu'à récupérer la dernière en faisant ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT mantis_bug_history_table.bug_id, Last(mantis_bug_history_table.date_modified) AS DernierDedate_modified, Last(mantis_bug_history_table.new_value) AS DernierDenew_value
    FROM mantis_bug_history_table
    WHERE (((mantis_bug_history_table.field_name)="status"))
    GROUP BY mantis_bug_history_table.bug_id;
    savez vous comment faire?

  2. #2
    Expert éminent
    Avatar de Lou Pitchoun
    Profil pro
    Inscrit en
    Février 2005
    Messages
    5 038
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Février 2005
    Messages : 5 038
    Points : 8 268
    Points
    8 268
    Par défaut
    SAlut
    As tu essayé avec Max()
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Max(mantis_bug_history_table.date_modified) AS DernierDedate_modified

  3. #3
    Membre régulier
    Inscrit en
    Mai 2005
    Messages
    130
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 130
    Points : 71
    Points
    71
    Par défaut
    ben ça me donne toujours la dernière
    max ou last ça donne la dernière.

    c'est peut être pas possible alors
    est ce que quelqu'un sait comment récupérer tout SAUF le dernier?

    comme ça après je récupère le dernier de ça et ça me donne l'avant dernier.

  4. #4
    Membre expérimenté

    Homme Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 183
    Points : 1 362
    Points
    1 362
    Par défaut
    Essaie avec un
    select last(date_modified) from (select top 2 date_modified from ... where ... order by date_modified desc)
    [Access] Les bases du débogage => ici

  5. #5
    Provisoirement toléré Avatar de charleshbo
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    222
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 222
    Points : 125
    Points
    125
    Par défaut
    C'est peut-être possible, mais avec du code je dirais : Arrange toi pour mettre ta table dans un recordSet, sélectionne l'item situé a RecordCount - 1... passe ça dans une boucle et trouve l'enregistrement.
    Charles Bergeron - Webmaster/Infographe/Photographe

  6. #6
    Membre régulier
    Inscrit en
    Mai 2005
    Messages
    130
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 130
    Points : 71
    Points
    71
    Par défaut
    Citation Envoyé par Kloun
    Essaie avec un
    select last(date_modified) from (select top 2 date_modified from ... where ... order by date_modified desc)
    ça me donne bien l'avant dernier mais la peoblème c'est que ça me donne l'avant dernier de ma table alors que je veux l'avant dernier de chaque bug_id

  7. #7
    Membre régulier
    Inscrit en
    Mai 2005
    Messages
    130
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 130
    Points : 71
    Points
    71
    Par défaut
    Citation Envoyé par charleshbo
    C'est peut-être possible, mais avec du code je dirais : Arrange toi pour mettre ta table dans un recordSet, sélectionne l'item situé a RecordCount - 1... passe ça dans une boucle et trouve l'enregistrement.
    je ne peux pas car je n'utilise que les requetes. pas de code derrière

  8. #8
    Expert confirmé

    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 419
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 419
    Points : 4 297
    Points
    4 297
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    SELECT bug, date,
     DCount("bug","matable","bug=" & [bug] & " and  clng(date)<=" & CLng([date])) AS compteur
    FROM matable
    WHERE (((DCount("bug","matable","bug=" & [bug] & " and  clng(date)<=" & CLng([date])))=DCount("bug","matable","bug=" & [bug])-2));
    Elle est pas belle la vie ?

  9. #9
    Membre régulier
    Inscrit en
    Mai 2005
    Messages
    130
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 130
    Points : 71
    Points
    71
    Par défaut
    Citation Envoyé par random
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    SELECT bug, date,
     DCount("bug","matable","bug=" & [bug] & " and  clng(date)<=" & CLng([date])) AS compteur
    FROM matable
    WHERE (((DCount("bug","matable","bug=" & [bug] & " and  clng(date)<=" & CLng([date])))=DCount("bug","matable","bug=" & [bug])-2));
    ça ça s'utilise dans du code pas dans la requete elle meme, si?
    je ne me sers que des requetes créés à partir de access

  10. #10
    Expert confirmé

    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 419
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 419
    Points : 4 297
    Points
    4 297
    Par défaut
    moi aussi
    crée une table nommé matable
    ajoute lui tes bug et date et lance cette requête
    Elle est pas belle la vie ?

  11. #11
    Membre régulier
    Inscrit en
    Mai 2005
    Messages
    130
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 130
    Points : 71
    Points
    71
    Par défaut
    sinon savez vous comment récupérer tout sauf le dernier enregistrement de chaque bug?

  12. #12
    Expert confirmé

    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 419
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 419
    Points : 4 297
    Points
    4 297
    Par défaut
    oui
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT matable.bug, matable.date, DCount("bug","matable","bug=" & [bug] & " and  clng(date)<=" & CLng([date])) AS compteur
    FROM matable
    WHERE (((DCount("bug","matable","bug=" & [bug] & " and  clng(date)<=" & CLng([date])))<>DCount("bug","matable","bug=" & [bug])));
    Elle est pas belle la vie ?

  13. #13
    Membre régulier
    Inscrit en
    Mai 2005
    Messages
    130
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 130
    Points : 71
    Points
    71
    Par défaut
    merci sauf que je viens de lancer la requete et elle met 1h à se faire. elle est toujours pas finie.

  14. #14
    Expert confirmé

    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 419
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 419
    Points : 4 297
    Points
    4 297
    Par défaut
    il fallait dire que tu avais énormément de données

    si c'est ca il faut faire en plusieurs requêtes
    Elle est pas belle la vie ?

  15. #15
    Membre régulier
    Inscrit en
    Mai 2005
    Messages
    130
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 130
    Points : 71
    Points
    71
    Par défaut
    ben oui mais je n'y arrive pas, tout le problème est là

  16. #16
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 91
    Points : 92
    Points
    92
    Par défaut Une petite idée ....
    Je te donne cette idée qui vient de sortir de mon esprit tortueux (pas parce que je suis tordu mais parce que je réfléchis lentement).
    Imaginons que ta table se nomme "data"

    Première requête (Nom = "req1")
    Rechercher le max de date de chaque bug_id dans la table data

    Deuxième requête (Nom = "req2")
    Rechercher dans ta table "data" tous les enregistrements qui n'ont pas de lien avec la requête "req1"
    A ce stade tu dois avoir éliminé le dernier enregistrement

    Troisième requête (Nom = "Bon_Resultat_J_espere")
    Rechercher à nouveau le max chaque bug_id dans la requête "req2"

    L'ambulance vient d'arriver des hommes en blanc ont un manteau pour moi.

  17. #17
    Expert confirmé

    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 419
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 419
    Points : 4 297
    Points
    4 297
    Par défaut
    tout en sql (un peu plus rapide) cela pourrait donner ceci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    select bugprov as bug,dateprov as mdate from
    (select bugprov,dateprov,count(compteurprov) as nb  from
    (SELECT a.bug AS bugprov, a.date AS dateprov, b.date AS compteurprov
    FROM matable AS a INNER JOIN matable AS b ON a.bug = b.bug
    WHERE (((b.date)>=[a].[date])) 
    ORDER BY b.date DESC)  group by bugprov,dateprov) where nb=2 ;
    pour optimiser les perfs indexe bug et date
    si tu veux accéder de façon trés rapide et habituellement à des notions d'ordre de données il faut reconcevoir la table et ajouter un compteur par bug
    Elle est pas belle la vie ?

  18. #18
    Membre régulier
    Inscrit en
    Mai 2005
    Messages
    130
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 130
    Points : 71
    Points
    71
    Par défaut
    oui keuf95n, j'y ai pensé mais je n'arrive pas à le faire, as tu une proposition de code?

  19. #19
    Membre régulier
    Inscrit en
    Mai 2005
    Messages
    130
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 130
    Points : 71
    Points
    71
    Par défaut
    bon j'ai réussi à récupérer l'avant dernier mais j'ai encore un problème:

    voici mon code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT tab.bug_id, Last(tab.date_modified) AS DernierDedate_modified, Last(tab.new_value) AS DernierDenew_value
    FROM [SELECT tous.bug_id, tous.date_modified, tous.new_value
    FROM tous INNER JOIN dernier ON tous.bug_id = dernier.bug_id
    WHERE (((tous.date_modified)<[dernier].[DernierDeDate_modified]))]. AS tab
    GROUP BY tab.bug_id
    HAVING (((Last(tab.new_value))="80" Or (Last(tab.new_value))="90"));
    dans la table tous j'ai toutes les valeurs. dans dernier j'ai les dernières dates pour chaque bug.
    je compare les 2 et je récupère celle juste avant la dernière. jusque là c'est bon.
    mais en fait dans dernier je récupère seulement les bug qui ont comme new_value 80 ou 90
    et dans avant dernier je veux ceux dont la valeur est 80 ou 90 MAIS AUSSI il faut que le dernier du meme bug soit aussi à 80 ou 90.

    donc dans ma formule il faut que j'arrive à lui dire que pour mon avant dernier il faut que le dernier soit à 80 ou 90.

    je n'arrive pas à le faire, pourtant ça doit pas être compliqué.

  20. #20
    Membre régulier
    Inscrit en
    Mai 2005
    Messages
    130
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 130
    Points : 71
    Points
    71
    Par défaut
    non ben j'ai rien dit en fait c'est bon car comme mon dernier je fais une selection sur les 80 ou 90 et que mon avant dernier je le compare sur ça ben c'est bon.

    merci à tous pour votre aide en tout cas.
    bonne journée

Discussions similaires

  1. Itérateur sur l'avant-dernier élément d'une liste
    Par DJM400 dans le forum SL & STL
    Réponses: 8
    Dernier message: 15/12/2009, 18h33
  2. [XL-2003] rechercher le dernier d'une liste
    Par bart13300 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 31/05/2009, 18h47
  3. Réponses: 4
    Dernier message: 23/06/2006, 17h35
  4. [VB6] Allez en avant dernier enregistrement d'une table acce
    Par bb62 dans le forum VB 6 et antérieur
    Réponses: 8
    Dernier message: 10/02/2006, 15h42
  5. selectionner le dernier element d'une liste box
    Par adilou1981 dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 17/03/2005, 10h19

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