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 :

Deux lignes presques identiques


Sujet :

Requêtes MySQL

  1. #1
    Membre à l'essai
    Inscrit en
    Juin 2007
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 26
    Points : 12
    Points
    12
    Par défaut Deux lignes presques identiques
    Bonjour, je patoge un peu avec les requetes sql.

    J'ai tapé cette requete:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT NS, V1, DAT FROM tra t
    Where WS= 'WS04' and CODE ='27' and R2 ='1' AND R3='1'
    AND DAT > '2008-01-01 00:00:00' AND DAT < '2008-06-01 00:00:00' order by NS
    Voici le résultat:
    NS V1 DAT
    00087 3 2008-04-25 11:08:54
    00088 3 2008-04-25 11:13:56
    00089 7 2008-04-25 11:21:19
    00089 3 2008-04-25 11:46:17

    00090 3 2008-04-25 11:31:16
    00091 3 2008-05-16 16:12:11
    00092 3 2008-05-16 16:07:08
    00093 3 2008-05-20 11:11:41
    00093 3 2008-05-16 18:33:13
    00093 3 2008-05-16 19:06:41


    Malheureusement dans ce résultat j'ai des NS identiques, et j'aimerai garder uniquement les lignes avec DAT le plus grand pour le même NS.
    J'aimerai avoir ce résultat:

    NS V1 DAT
    00087 3 2008-04-25 11:08:54
    00088 3 2008-04-25 11:13:56
    00089 3 2008-04-25 11:46:17
    00090 3 2008-04-25 11:31:16
    00091 3 2008-05-16 16:12:11
    00092 3 2008-05-16 16:07:08
    00093 3 2008-05-16 19:06:41


    Vous avez une idée?

  2. #2
    ced
    ced est déconnecté
    Rédacteur/Modérateur

    Avatar de ced
    Homme Profil pro
    Gestion de bases de données techniques
    Inscrit en
    Avril 2002
    Messages
    6 016
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Gestion de bases de données techniques
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2002
    Messages : 6 016
    Points : 23 705
    Points
    23 705
    Par défaut
    Bonjour,

    Une petite remarque pour améliorer les perfs de la requête : plutôt que de mettre 2 conditions (avec > et <), il vaut mieux préférer le mot clef BETWEEN.
    Sinon, est-ce que la requête suivante conviendrait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT NS, V1, MAX(DAT) AS DAT 
    FROM tra t
    WHERE WS= 'WS04' AND CODE ='27' AND R2 ='1' AND R3='1'
    AND DAT BETWEEN '2008-01-01 00:00:00' AND '2008-06-01 00:00:00' 
    GROUP BY NS, V1
    ORDER BY NS
    ced
    Rédacteur / Modérateur SGBD et R
    Mes tutoriels et la FAQ MySQL

    ----------------------------------------------------
    Pensez aux balises code et au tag
    Une réponse vous a plu ? N'hésitez pas à y mettre un
    Je ne réponds pas aux questions techniques par message privé, les forums sont là pour ça

  3. #3
    Membre à l'essai
    Inscrit en
    Juin 2007
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 26
    Points : 12
    Points
    12
    Par défaut
    Merci pour le between.

    Non, la requete ne fonctionne pas, voici le résultat:

    NS V1 DAT
    00087 3 2008-04-25 11:08:54
    00088 3 2008-04-25 11:13:56
    00089 7 2008-04-25 11:21:19
    00089 3 2008-04-25 11:46:17

    00090 3 2008-04-25 11:31:16
    00091 3 2008-05-16 16:12:11
    00092 3 2008-05-16 16:07:08
    00093 3 2008-05-20 11:11:41

    le 89 est toujours en double

  4. #4
    Expert confirmé Avatar de Cybher
    Homme Profil pro
    Consultant réseaux et sécurité
    Inscrit en
    Mai 2005
    Messages
    3 281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Consultant réseaux et sécurité
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 281
    Points : 4 641
    Points
    4 641
    Par défaut
    bonjour,

    comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT NS, V1, MAX(DAT) AS DAT 
    FROM tra t
    WHERE WS= 'WS04' AND CODE ='27' AND R2 ='1' AND R3='1'
    AND DAT BETWEEN '2008-01-01 00:00:00' AND '2008-06-01 00:00:00' 
    GROUP BY NS
    ORDER BY NS

  5. #5
    Membre à l'essai
    Inscrit en
    Juin 2007
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 26
    Points : 12
    Points
    12
    Par défaut
    Merci messieur,
    je n'ai pas encore testé cette dernière solution, mais j'ai fait des recherches sur la fonction "group by" que je ne connaissais pas, et effectivement, je pense que associé à MAX() elle ira tres bien.

    Je fais mon essai demain et je vous tiens au courant.

    Encore merci de votre aide

  6. #6
    ced
    ced est déconnecté
    Rédacteur/Modérateur

    Avatar de ced
    Homme Profil pro
    Gestion de bases de données techniques
    Inscrit en
    Avril 2002
    Messages
    6 016
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Gestion de bases de données techniques
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2002
    Messages : 6 016
    Points : 23 705
    Points
    23 705
    Par défaut
    Attention, cette solution ne fonctionne qu'avec MySQL.
    Les autres SGBD génèreraient une erreur...

    ced
    Rédacteur / Modérateur SGBD et R
    Mes tutoriels et la FAQ MySQL

    ----------------------------------------------------
    Pensez aux balises code et au tag
    Une réponse vous a plu ? N'hésitez pas à y mettre un
    Je ne réponds pas aux questions techniques par message privé, les forums sont là pour ça

  7. #7
    Membre à l'essai
    Inscrit en
    Juin 2007
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 26
    Points : 12
    Points
    12
    Par défaut
    Oui c'est très bien, c'est mysql que j'utilise.
    Pour ma culture, comment ferait on avec un autre SGBD?

  8. #8
    ced
    ced est déconnecté
    Rédacteur/Modérateur

    Avatar de ced
    Homme Profil pro
    Gestion de bases de données techniques
    Inscrit en
    Avril 2002
    Messages
    6 016
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Gestion de bases de données techniques
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2002
    Messages : 6 016
    Points : 23 705
    Points
    23 705
    Par défaut
    Dans un autre SGBD, il faut nécessairement que les champs qui ne sont pas dans une fonction d'agrégation se retrouvent dans la clause GROUP BY.
    Or, dans le cas présent, V1 n'est pas dans le GROUP BY.
    Du coup, il faudrait faire une sous-requête pour ramener, pour chaque NS, la date la plus récente et, à partir de cette date, afficher le V1 correspondant.

    ced
    Rédacteur / Modérateur SGBD et R
    Mes tutoriels et la FAQ MySQL

    ----------------------------------------------------
    Pensez aux balises code et au tag
    Une réponse vous a plu ? N'hésitez pas à y mettre un
    Je ne réponds pas aux questions techniques par message privé, les forums sont là pour ça

  9. #9
    Membre à l'essai
    Inscrit en
    Juin 2007
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 26
    Points : 12
    Points
    12
    Par défaut
    Merci de votre précieuse aide,

    La requete a été concluante.

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

Discussions similaires

  1. Supprimer deux lignes successives non identiques
    Par korospoukine dans le forum Langage SQL
    Réponses: 14
    Dernier message: 29/01/2013, 12h48
  2. Désérilization XML de deux classes presque identique
    Par Oberown dans le forum Framework .NET
    Réponses: 6
    Dernier message: 07/11/2011, 17h59
  3. Réponses: 4
    Dernier message: 28/07/2011, 11h00
  4. Réponses: 1
    Dernier message: 20/06/2007, 17h03
  5. Deux lignes sur un TButton
    Par bml dans le forum Composants VCL
    Réponses: 2
    Dernier message: 24/07/2003, 11h17

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