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 :

Sélection d'un enregistrement parmi un jeu d'enregistrement [AC-2013]


Sujet :

Requêtes et SQL.

  1. #1
    Membre éprouvé

    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    981
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 981
    Points : 1 028
    Points
    1 028
    Billets dans le blog
    36
    Par défaut Sélection d'un enregistrement parmi un jeu d'enregistrement
    Bonjour à tous,

    Voilà mon problème

    Soit le jeu de données suivant

    Code1 Code2 Code3
    1 a 2dsd1
    2 a fs8gfdg
    3 a dsff85fdfe
    4 b fdfs87578
    5 b uyio74124
    6 c yuj12cfdg
    7 c piuur7879
    8 d wxwcx8545
    8 d 54gug7889

    Je veux recupérer une seul itération pour chaque Code2 et dont l'enregistrement est en deuxième position dans la table.

    Donc dans mon cas
    Code1 Code2 Code3
    2 a fs8gfdg
    5 b uyio74124
    7 c piuur7879
    8 d 54gug7889

    Merci par avance pour toute aide
    Mal nommer un objet, c'est ajouter au malheur de ce monde, car le mensonge est justement la grande misère humaine, c'est pourquoi la grande tâche humaine correspondante sera de ne pas servir le mensonge
    Poésie 44, n° 17 - Albert Camus

    Mes réponses vous ont aidés, un clic sur leur pouce vert
    Bonjour chez vous

  2. #2
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 648
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 648
    Points : 14 626
    Points
    14 626
    Par défaut
    bonsoir,
    je te propose le code ci-dessous mais il faut obligatoirement un ordre de tri unique (donc une clé primaire en numéro auto doit être présente dans la table), donc si Code1 n'est pas unique, cela ne peut pas fonctionner car rien ne garantit que le second enregistrement sera le bon comme pour le dernier cas (Code1 = "8", Code2 = "d").
    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
    Function fExtraireEnreg()
       Dim strRupture As String
       Dim strsql As String
       Dim Db As DAO.Database
       Dim oRst1 As DAO.Recordset
       Dim oRst2 As DAO.Recordset
       Dim I As Integer, J As Byte
     
       Set Db = CurrentDb()
       Set oRst1 = Db.OpenRecordset("select Code1,Code2, Code3 from tbl_codes order by N°", dbOpenSnapshot)
       Set oRst2 = Db.OpenRecordset("tbl_codes_New", dbOpenDynaset)
     
        Do While Not oRst1.EOF
        ' Rupture sur le Code2
            If strRupture <> oRst1.Fields("Code2") Then
                strRupture = oRst1.Fields("Code2")
                I = 0
            End If
     
            I = I + 1
        ' Remplissage de la table (la table tbl_codes_New est la copie de tbl_codes mais sans clé primaire)
            If I = 2 Then
                oRst2.AddNew
                For J = 0 To oRst1.Fields.Count - 1
                    oRst2.Fields(J) = oRst1.Fields(J)
                Next J
                oRst2.Update
            End If
     
            oRst1.MoveNext
        Loop
     
       oRst1.Close: Set oRst1 = Nothing
       oRst2.Close: Set oRst2 = Nothing
       Db.Close:   Set Db = Nothing
     
    End Function
    Quand on est derrière l'écran on n'a aucun clavier sous les mains ...
    ah non ? donc devant l'écran c'est la connectique ?

  3. #3
    Membre éprouvé

    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    981
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 981
    Points : 1 028
    Points
    1 028
    Billets dans le blog
    36
    Par défaut
    Bonsoir tee_grandbois,

    L’exercice à l’origine résidait dans l’utilisation du SQL pur sans VBA pour créer une vue à associer ensuite à une vue principale base d’une architecture en étoile.

    Mais je peux effectivement d’abord créer cette table pour ensuite l’integrer dans une vue en étoile.

    En tout cas, merci encore pour ton code très précieux.
    Mal nommer un objet, c'est ajouter au malheur de ce monde, car le mensonge est justement la grande misère humaine, c'est pourquoi la grande tâche humaine correspondante sera de ne pas servir le mensonge
    Poésie 44, n° 17 - Albert Camus

    Mes réponses vous ont aidés, un clic sur leur pouce vert
    Bonjour chez vous

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


    Avatar de f-leb
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2009
    Messages
    12 617
    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 617
    Points : 56 722
    Points
    56 722
    Billets dans le blog
    40
    Par défaut


    Le 2e enregistrement, c'est celui qui pour un même code2 comprend un seul enregistrement avec un code1 strictement inférieur :

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT * FROM informer as i1 WHERE
    (select count(*)=1 FROM informer WHERE code2=i1.code2 AND code1<i1.code1);

  5. #5
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 648
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 648
    Points : 14 626
    Points
    14 626
    Par défaut
    bonsoir et merci f-leb,
    cela ne fonctionne pas avec code1 (dans le cas où Code1 = "8" pour les 2 derniers enregistrements).
    j'ai remplacé Code1 par N° en supposant qu'il existe une clé primaire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT * FROM informer as i1 WHERE
    (select count(*)=1 FROM informer WHERE code2=i1.code2 AND N°<i1.N°);
    Quand on est derrière l'écran on n'a aucun clavier sous les mains ...
    ah non ? donc devant l'écran c'est la connectique ?

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


    Avatar de f-leb
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2009
    Messages
    12 617
    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 617
    Points : 56 722
    Points
    56 722
    Billets dans le blog
    40
    Par défaut
    Citation Envoyé par tee_grandbois Voir le message
    cela ne fonctionne pas avec code1 (dans le cas où Code1 = "8" pour les 2 derniers enregistrements).
    Ah oui, ça m'a échappé. Mais ce cas peut-il se produire réellement (et dans ce cas, comme distinguer le premier du deuxième) ou c'est une erreur de frappe ?

  7. #7
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 648
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 648
    Points : 14 626
    Points
    14 626
    Par défaut
    Mais ce cas peut-il se produire réellement (et dans ce cas, comme distinguer le premier du deuxième) ou c'est une erreur de frappe ?
    à informer de nous le dire
    Quand on est derrière l'écran on n'a aucun clavier sous les mains ...
    ah non ? donc devant l'écran c'est la connectique ?

  8. #8
    Membre éprouvé

    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    981
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 981
    Points : 1 028
    Points
    1 028
    Billets dans le blog
    36
    Par défaut
    C’est effectivement une erreur. La valeur de code1 de la dernière ligne est 9.

    Bien vu et encore merci pour votre aide
    Mal nommer un objet, c'est ajouter au malheur de ce monde, car le mensonge est justement la grande misère humaine, c'est pourquoi la grande tâche humaine correspondante sera de ne pas servir le mensonge
    Poésie 44, n° 17 - Albert Camus

    Mes réponses vous ont aidés, un clic sur leur pouce vert
    Bonjour chez vous

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 29/12/2015, 18h31
  2. Réponses: 8
    Dernier message: 08/08/2008, 11h19
  3. [VBA] Pourquoi mon jeu d'enregistrement est vide ?
    Par gyzmo5 dans le forum Access
    Réponses: 2
    Dernier message: 09/02/2006, 14h15
  4. Sélection d'enregistrement parmis plusieurs identiques
    Par monnoliv dans le forum Décisions SGBD
    Réponses: 2
    Dernier message: 24/09/2005, 15h32
  5. sélection d'un max parmi plusieurs champs
    Par invitésuprise dans le forum Langage SQL
    Réponses: 2
    Dernier message: 12/08/2005, 13h49

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