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 MySQL Discussion :

Comment récupérer le numéro minimum d'une donnée créée dans le code ?


Sujet :

Requêtes MySQL

  1. #1
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Juillet 2018
    Messages
    56
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 27
    Localisation : France, Aisne (Picardie)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2018
    Messages : 56
    Points : 45
    Points
    45
    Par défaut Comment récupérer le numéro minimum d'une donnée créée dans le code ?
    Bonjour à tous,

    J'ai imaginé le code ci-dessous :
    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
    SELECT table1.*,  
    CASE 	
    WHEN table1.created_by LIKE '%@monentreprise.com' 
    	AND (table1.titre LIKE 'DON%' OR table1.titre LIKE 'REP%') 
    	THEN 1
    WHEN table1.created_by LIKE '%@monentreprise.com' 
    	AND table1.titre LIKE 'LIVRE%'
    	THEN 2
    WHEN table1.created_by NOT LIKE '%@monentreprise.com' 
    	AND table1.titre LIKE 'DON%'  
    	THEN 3 
    WHEN table1.created_by NOT LIKE '%@monentreprise.com' 
    	AND table1.titre LIKE 'LIVRE%'
    	THEN 4
    END AS NV_TITRE
    Dans ma base de données, j'ai plusieurs lignes pour un seul ID et je souhaite en récupérer qu'une ligne, et c'est celle qui aura le plus petit chiffre dans la variable NV_TITRE

    Mais la fonction MIN(NV_TITRE) n'est pas valide car champs n'existe pas dans ma base.
    Auriez-vous une autre idée svp ? J'aimerai que la boucle WHEN agisse comme un IF en VBA, c'est-à-dire, que dès quelle trouve un résultat elle passe à l'ID suivant. Alors que là, j'ai plusieurs ID qui ressortent car ils ont la condition 1, 2, 3, ... qui sont vraies.
    et lorsqu'à la fin j'écris GROUP BY ORDER_ID ça me mets en erreur...

    Je suis débutante, j'espère avoir été claire. Merci d'avance pour votre aide.
    Belle journée à tous!

  2. #2
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Juillet 2018
    Messages
    56
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 27
    Localisation : France, Aisne (Picardie)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2018
    Messages : 56
    Points : 45
    Points
    45
    Par défaut
    Voici un exemple du résultat attendu, je souhaite récupérer que la ligne verte car elle a le num le plus faible :

    Nom : Capture.JPG
Affichages : 69
Taille : 31,8 Ko

    Et j'ai bien entendu d'autres numéros ID dans ma base de données. Et le numéro le plus faible ne sera pas toujours égale à un.

  3. #3
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 198
    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 198
    Points : 12 774
    Points
    12 774
    Par défaut
    Bonjour,
    Rechercher le premier/dernier/plus petit/plus grand est une demande plus que récurrente ici...
    La réponse est .

    Tatayo.

  4. #4
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Juillet 2018
    Messages
    56
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 27
    Localisation : France, Aisne (Picardie)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2018
    Messages : 56
    Points : 45
    Points
    45
    Par défaut
    Bonjour, non car dans mon cas la colonne NV_LIVRE n'est pas dans ma base de données, c'est une donnée que je créais à l'aide de mon code.
    Et j'ai dû mal à comprendre cette page, je l'ai déjà eu à lire et c'est compliqué pour débuter :/

  5. #5
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 136
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 136
    Points : 38 909
    Points
    38 909
    Billets dans le blog
    9
    Par défaut
    quelle est votre version MySQL ?

  6. #6
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Juillet 2018
    Messages
    56
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 27
    Localisation : France, Aisne (Picardie)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2018
    Messages : 56
    Points : 45
    Points
    45
    Par défaut
    Je ne sais pas vraiment je fais une requête sur datastudio, est-ce que cela vous aide?

  7. #7
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 198
    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 198
    Points : 12 774
    Points
    12 774
    Par défaut
    Tu peux utiliser une CTE, si la version de MySql le permet (de mémoire à partir de la version 8.0).
    A priori tu peux voir quelle version est utilisée en lançant la requête "SELECT VERSION()".

    Tatayo.

  8. #8
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Juillet 2018
    Messages
    56
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 27
    Localisation : France, Aisne (Picardie)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2018
    Messages : 56
    Points : 45
    Points
    45
    Par défaut
    Je ne comprends rien... Qu'est-ce qu'une CTE ?

    Je suis sur GoogleDataStudio, lorsque je lance la fonction SELECT VERSION() ça me met erreur
    "La requête a renvoyé une erreur.
    ID de l'erreur : 87b8242e "

    Tant que vous n'avez pas ma version vous ne pouvez pas m'aider pour ma problématique initiale ?
    Comment faire une boucle WHEN qui passe à l'ID suivant quand un résultat est trouvé, pour ne remonter qu'une ligne par ID ?

    Merci d'avance et désolée de ne pas tout comprendre

  9. #9
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 136
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 136
    Points : 38 909
    Points
    38 909
    Billets dans le blog
    9
    Par défaut
    Bonjour,

    Faute de connaître votre version MySQL, voici une solution applicable sur toutes les versions

    Création du jeu d'essai :
    Code SQL : 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
    create table table1
         (  id          integer       not null  
          , created_by  varchar(255)  not null
          , titre       varchar(128)
         )
    ;
    insert into table1(id, created_by, titre)
    values (232, 'rr@monentreprise.com', 'LIVRE 45')
         , (232, 'ee@google.com', 'LIVRE 4')
         , (232, 'rr@monentreprise.com', 'DON 487')
         , (232, 'ee@google.com', 'DON 489')
         , (444, 'rr@monentreprise.com', 'LIVRE 444')
         , (444, 'ee@google.com', 'DON 444')
         , (444, 'xx.@monentreprise.fr', 'AUTRE 444')
         , (555, 'abcdef@monentreprise.com', 'DON 555')
    ;


    Requête d'extraction :

    Code SQL : 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
    38
    39
    40
    select XX.SID  as 'Ident'
         , XX.SCB  as 'Créé par'
         , XX.SNT  as 'Niveau'
    from (select id            SID 
               , created_by    SCB
               , case when created_by like '%@monentreprise.com' 
                      and (titre like 'DON%' or titre like 'REP%') 
                           then 1
                      when created_by like '%@monentreprise.com' 
                       and titre like 'LIVRE%'
                           then 2 
                      when created_by not like '%@monentreprise.com' 
                       and titre LIKE 'DON%'  
                           then 3 
                      when created_by not like '%@monentreprise.com' 
                       and titre LIKE 'LIVRE%'
                           then 4
                      else 5
                 end as        SNT
          from table1     
         ) as XX
    where not exists
         (select 1 
          from table1 T1
          where T1.id=XX.SID
            and case when created_by like '%@monentreprise.com' 
                      and (titre like 'DON%' or titre like 'REP%') 
                           then 1
                      when created_by like '%@monentreprise.com' 
                       and titre like 'LIVRE%'
                           then 2 
                      when created_by not like '%@monentreprise.com' 
                       and titre LIKE 'DON%'  
                           then 3 
                      when created_by not like '%@monentreprise.com' 
                       and titre LIKE 'LIVRE%'
                           then 4
                      else 5
                 end < XX.SNT
         )


    Résultat :

    Ident Créé par Niveau
    232 rr@monentreprise.com 1
    444 rr@monentreprise.com 2
    555 abcdef@monentreprise.com 1


    Une CTE (Common Table Expression, applicable uniquement à partir de la V8) aurait permis de mutualiser le CASE...END ici écrit deux fois

  10. #10
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 136
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 136
    Points : 38 909
    Points
    38 909
    Billets dans le blog
    9
    Par défaut
    Voici la solution équivalente avec une CTE (déclarée avec "WITH"), donc MySQL V8 requis
    On voit ici l'intérêt de cette solution qui évite d'écrire deux fois le même CASE.

    Code SQL : 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
    with CTE1 (SID, SCB, SNT) as
        (select id        
              , created_by
              , case when created_by like '%@monentreprise.com' 
                      and (titre like 'DON%' or titre like 'REP%') 
                          then 1
                     when created_by like '%@monentreprise.com' 
                      and titre like 'LIVRE%'
                          then 2 
                     when created_by not like '%@monentreprise.com' 
                      and titre LIKE 'DON%'  
                          then 3 
                     when created_by not like '%@monentreprise.com' 
                      and titre LIKE 'LIVRE%'
                          then 4
                     else 5
                end  as SNT
         from table2     
        ) 
    select SID
         , SCB
         , SNT
    from CTE1 T0
    where not exists
         (select 1
          from CTE1 T1
          where T1.SID=T0.SID
            and T1.SNT<T0.SNT
          )

    Le résultat est identique.

  11. #11
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Juillet 2018
    Messages
    56
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 27
    Localisation : France, Aisne (Picardie)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2018
    Messages : 56
    Points : 45
    Points
    45
    Par défaut
    Top ! Merci beaucoup pour ton aide.
    En effet je ne pense pas avoir la V8 car la requête est en erreur. alors qu'avec le premier code j'ai réussi à l'adapter à ma base et ça fonctionne.
    Encore merci !
    Bonne journée à tous !

  12. #12
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Juillet 2018
    Messages
    56
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 27
    Localisation : France, Aisne (Picardie)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2018
    Messages : 56
    Points : 45
    Points
    45
    Par défaut
    Bonjour à tous,
    Il se peut que dans ma base de données, j'ai plusieurs lignes qui correspondent au niveau 3 de ce fait, j'ai plusieurs lignes qui sont extraites. Or j'aurai besoin d'en avoir qu'une seule.
    (Imaginons, je peux avoir deux lignes avec le même mail, et qui commence toutes les deux par "LIVRE")

    On pourrait prendre par rapport à la date le dernier ajouté. (j'ai une colonne date) mais si on peut faire plus simple et en prendre 1 au "pif" ça ne me dérange pas.

    J'ai rajouté un "LIMIT 1" après la ligne 39, mais j'ai toujours plusieurs lignes qui sortent pour un même ID.
    J'ai également essayé avec "GROUP BY id" mais là, code non valide.

    Avez vous une idée svp ?

    Merci d'avance !!

  13. #13
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 136
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 136
    Points : 38 909
    Points
    38 909
    Billets dans le blog
    9
    Par défaut
    Bonjour,

    Il suffit d'ajouter l'opérateur DISTINCT.

  14. #14
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Juillet 2018
    Messages
    56
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 27
    Localisation : France, Aisne (Picardie)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2018
    Messages : 56
    Points : 45
    Points
    45
    Par défaut
    Bonjour j'ai essayé de le placer un peu partout (derrière tous les "SELECT" que j'ai dans mon code), mais rien n'y fait.
    Il faut que je le place où exactement pour que cela fonctionne stp ?

    Merci d'avance, belle journée

    Edit : en regardant sur internet la fonction DISTINCT est utilisé quand c'est exactement le même mot. Est-ce que ça peut marcher aussi lorsque JUSTE le début est le même ? Y a t-il du coup une façon d'écrire cette contrainte ?

  15. #15
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 136
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 136
    Points : 38 909
    Points
    38 909
    Billets dans le blog
    9
    Par défaut
    Relativement à ma réponse n° 9 :

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    select distinct
           XX.SID  as 'Ident'
         , XX.SCB  as 'Créé par'
         , XX.SNT  as 'Niveau'
    from (select id  ...

    DISTINCT n'élimine que les vrais doublons, si deux occurrences d'une même colonne sont proches mais pas strictement identiques, alors elles sont conservées.
    Bien évidemment, le résultat de la comparaison dépend de la collation (case sensitive ou pas)

  16. #16
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Juillet 2018
    Messages
    56
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 27
    Localisation : France, Aisne (Picardie)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2018
    Messages : 56
    Points : 45
    Points
    45
    Par défaut
    bonjour à tous,
    Pour info et pour ceux qui en aurait besoin
    A la place d'affecter la priorité 1 / 2 / 3 / 4 ... à un CASE j'ai mis des grand nombre comme 9000000 / 800000 / 70000 / ... et j'ajoute derrière la différence entre deux dates. Comme ça la priorite n'a jamais le même nombre et je sélectionne la plus grande priorité.

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 14/03/2019, 20h16
  2. [Python 3.X] Comment récupérer le numéro de ligne en cours d’exécution dans le script
    Par campeaux dans le forum Général Python
    Réponses: 5
    Dernier message: 04/02/2017, 12h19
  3. [C#] Comment récupérer le numéro de semaine d'une date ?
    Par farfadet dans le forum Windows Forms
    Réponses: 9
    Dernier message: 17/07/2013, 16h33
  4. Réponses: 1
    Dernier message: 10/01/2009, 17h34
  5. Réponses: 2
    Dernier message: 12/09/2006, 17h48

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