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

Langage SQL Discussion :

probleme avec distinct


Sujet :

Langage SQL

  1. #1
    Membre confirmé

    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    650
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 650
    Points : 546
    Points
    546
    Par défaut probleme avec distinct
    Bonjour, j'ai un soucis avec un requette,

    select e.ID, r.DEBUT from EVT as e, REP as r where e.ID = r.EVT_ID and e.ID in (1119,1118, 1117) order by r.DEBUT asc;
    +------+---------------------+
    | ID | DEBUT |
    +------+---------------------+
    | 1119 | 2005-08-20 08:00:00 |
    | 1117 | 2005-08-29 19:00:00 |
    | 1118 | 2005-08-31 19:00:00 |
    | 1117 | 2005-09-26 19:00:00 |
    | 1118 | 2005-09-28 19:00:00 |
    | 1118 | 2005-10-26 19:00:00 |
    | 1117 | 2005-10-31 19:00:00 |
    | 1117 | 2005-11-28 19:00:00 |
    | 1118 | 2005-11-30 19:00:00 |
    | 1117 | 2005-12-26 19:00:00 |
    | 1118 | 2005-12-28 19:00:00 |
    +------+---------------------+
    ca, ok, par contre si je met :
    select distinct e.ID from EVT as e, REP as r where e.ID = r.EVT_ID and e.ID in (1119,1118, 1117) order by r.DEBUT asc;

    je voudrais que les premiers unique, soit : 1119, 1117, 1118
    j'obtiens :

    +------+
    | ID |
    +------+
    | 1119 |
    | 1118 |
    | 1117 |
    +------+
    Comment cela se fait il ?

  2. #2
    Membre expert Avatar de KiLVaiDeN
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    2 851
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 2 851
    Points : 3 481
    Points
    3 481
    Par défaut
    Tu as oublié dans ton SELECT de préciser la date.
    K

  3. #3
    Membre confirmé

    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    650
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 650
    Points : 546
    Points
    546
    Par défaut
    ben oui, justement, jene veux que les identifiant

    et si je met :
    select distinct e.ID, r.DEBUT from EVT as e, REP as r where e.ID = r.EVT_ID and e.ID in (1119,1118, 1117) order by r.DEBUT asc;

    j'obtient le meme resultat que sans le distinct

  4. #4
    Membre expert Avatar de KiLVaiDeN
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    2 851
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 2 851
    Points : 3 481
    Points
    3 481
    Par défaut
    Hmm je ne comprend pas trop le problème au final, peux-tu formaliser ce que tu souhaites obtenir ? Car forcément en faisant un distinct sur deux champs qui sont toujours uniques tu vas récupérer la même chose..

    En faisait un distinct sur l'id, tu ne récupèreras pas les doublons, c'est à ça que sert distinct.. Que veux-tu faire exactement ?
    K

  5. #5
    Inactif   Avatar de Médiat
    Inscrit en
    Décembre 2003
    Messages
    1 946
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 946
    Points : 2 227
    Points
    2 227
    Par défaut
    Si tu ne veux que les identifiants :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    select distinct e.ID 
    from EVT as e
    where e.ID in (1119,1118, 1117)
    mais je ne vois pas trop l'intérêt.

    Si tu veux tes 3 lignes avec une date, il faut définir laquelle tu veux, par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT e.ID, MAX(r.DEBUT)
    FROM EVT AS e, REP AS r 
    WHERE e.ID = r.EVT_ID 
      AND e.ID in (1119,1118, 1117) 
    GROUP BY e.ID
    et pourquoi pas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT EVT_ID, MAX(DEBUT)
    FROM REP
    WHERE EVT_ID in (1119,1118, 1117) 
    GROUP BY EVT_ID
    J'affirme péremptoirement que toute affirmation péremptoire est fausse
    5ième élément : barde-prince des figures de style, duc de la synecdoque
    Je ne réponds jamais aux questions techniques par MP

  6. #6
    Membre confirmé

    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    650
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 650
    Points : 546
    Points
    546
    Par défaut
    Ce que je veux, c'est les identifiant des evenements par ordre de premiere apparition

  7. #7
    Inactif   Avatar de Médiat
    Inscrit en
    Décembre 2003
    Messages
    1 946
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 946
    Points : 2 227
    Points
    2 227
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT EVT_ID
    FROM REP 
    WHERE EVT_ID in (1119,1118, 1117) 
    GROUP BY EVT_ID
    ORDER BY MIN(DEBUT)
    J'affirme péremptoirement que toute affirmation péremptoire est fausse
    5ième élément : barde-prince des figures de style, duc de la synecdoque
    Je ne réponds jamais aux questions techniques par MP

  8. #8
    Membre confirmé

    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    650
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 650
    Points : 546
    Points
    546
    Par défaut
    ca fait pareil ca,
    1119, 1118, 1117

    [edit]
    Autant pour moi, j'avais pas vu la fin at avait laissé "order by r.DEBUT asc;" : ca donne :
    ERROR 1111: Invalid use of group function

  9. #9
    Inactif   Avatar de Médiat
    Inscrit en
    Décembre 2003
    Messages
    1 946
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 946
    Points : 2 227
    Points
    2 227
    Par défaut
    Postes la requête que tu exécutes ; quel moteur utilises-tu, quelle version ?
    J'affirme péremptoirement que toute affirmation péremptoire est fausse
    5ième élément : barde-prince des figures de style, duc de la synecdoque
    Je ne réponds jamais aux questions techniques par MP

  10. #10
    Membre confirmé

    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    650
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 650
    Points : 546
    Points
    546
    Par défaut
    select EVENEMENT_ID from REPRESENTATION where EVENEMENT_ID in (1119,1118, 1117) group by EVENEMMENT_ID order by MIN(DEBUT);

    celle la n'est pas bonne car debut fait parti de la table evenement


    version de mysql ?
    sous linux, je sais pas comment on l'obtient

  11. #11
    Membre expert Avatar de KiLVaiDeN
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    2 851
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 2 851
    Points : 3 481
    Points
    3 481
    Par défaut
    pourquoi ne pas faire "FROM EVENEMENTS" ?
    K

  12. #12
    Membre confirmé

    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    650
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 650
    Points : 546
    Points
    546
    Par défaut
    en fait, je peux me limiter a representation,

    select r.EVENEMENT_ID, r.DEBUT from REPRESENTATION as r where r.EVENEMENT_ID in (1119,1118, 1117) order by r.DEBUT asc;

    +--------------+---------------------+
    | EVENEMENT_ID | DEBUT |
    +--------------+---------------------+
    | 1119 | 2005-08-20 08:00:00 |
    | 1117 | 2005-08-29 19:00:00 |
    | 1118 | 2005-08-31 19:00:00 |
    | 1117 | 2005-09-26 19:00:00 |
    | 1118 | 2005-09-28 19:00:00 |
    | 1118 | 2005-10-26 19:00:00 |
    | 1117 | 2005-10-31 19:00:00 |
    | 1117 | 2005-11-28 19:00:00 |
    | 1118 | 2005-11-30 19:00:00 |
    | 1117 | 2005-12-26 19:00:00 |
    | 1118 | 2005-12-28 19:00:00 |
    +--------------+---------------------+
    select distinct r.EVENEMENT_ID from REPRESENTATION as r where r.EVENEMENT_ID in (1119,1118, 1117) order by r.DEBUT asc;
    +--------------+
    | EVENEMENT_ID |
    +--------------+
    | 1119 |
    | 1118 |
    | 1117 |
    +--------------+
    select EVENEMENT_ID from REPRESENTATION where EVENEMENT_ID in (1119,1118, 1117) group by EVENEMMENT_ID order by MIN(DEBUT);

    ERROR 1111: Invalid use of group function

  13. #13
    Inactif   Avatar de Médiat
    Inscrit en
    Décembre 2003
    Messages
    1 946
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 946
    Points : 2 227
    Points
    2 227
    Par défaut
    Je ne connais pas mySQL, mais sous ORACLE et sous SQLServer, cela marche parfaitement, je viens de faire les tests.
    J'affirme péremptoirement que toute affirmation péremptoire est fausse
    5ième élément : barde-prince des figures de style, duc de la synecdoque
    Je ne réponds jamais aux questions techniques par MP

  14. #14
    Membre confirmé

    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    650
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 650
    Points : 546
    Points
    546
    Par défaut
    snif ...

  15. #15
    Inactif   Avatar de Médiat
    Inscrit en
    Décembre 2003
    Messages
    1 946
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 946
    Points : 2 227
    Points
    2 227
    Par défaut
    Par curiosité, est-ce que tu peux essayer :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT EVT_ID, MIN(DEBUT) as Deb
    FROM REP 
    WHERE EVT_ID in (1119,1118, 1117) 
    GROUP BY EVT_ID 
    ORDER BY Deb
    ou encore
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT EVT_ID, MIN(DEBUT)
    FROM REP 
    WHERE EVT_ID in (1119,1118, 1117) 
    GROUP BY EVT_ID 
    ORDER BY 2
    J'affirme péremptoirement que toute affirmation péremptoire est fausse
    5ième élément : barde-prince des figures de style, duc de la synecdoque
    Je ne réponds jamais aux questions techniques par MP

  16. #16
    Membre confirmé

    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    650
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 650
    Points : 546
    Points
    546
    Par défaut
    mysql> select EVENEMENT_ID, MIN(DEBUT) ad Deb FROM REPRESENTATION WHERE EVENEMENT_ID in (1119,1118,1117) GROUP BY EVENEMENT_ID ORDER BY Deb;

    ERROR 1064: You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'Deb FROM REPRESENTATION WHERE EVENEMENT_ID in (1119,1118,1117)

    mysql> select EVENEMENT_ID, MIN(DEBUT) ad Deb FROM REPRESENTATION WHERE EVENEMENT_ID in (1119,1118,1117) GROUP BY EVENEMENT_ID ORDER BY 2;

    ERROR 1064: You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'Deb FROM REPRESENTATION WHERE EVENEMENT_ID in (1119,1118,1117)

  17. #17
    Inactif   Avatar de Médiat
    Inscrit en
    Décembre 2003
    Messages
    1 946
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 946
    Points : 2 227
    Points
    2 227
    Par défaut
    Citation Envoyé par firejocker
    mysql> select EVENEMENT_ID, MIN(DEBUT) ad Deb FROM REPRESENTATION WHERE EVENEMENT_ID in (1119,1118,1117) GROUP BY EVENEMENT_ID ORDER BY Deb;

    ERROR 1064: You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'Deb FROM REPRESENTATION WHERE EVENEMENT_ID in (1119,1118,1117)

    mysql> select EVENEMENT_ID, MIN(DEBUT) ad Deb FROM REPRESENTATION WHERE EVENEMENT_ID in (1119,1118,1117) GROUP BY EVENEMENT_ID ORDER BY 2;

    ERROR 1064: You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'Deb FROM REPRESENTATION WHERE EVENEMENT_ID in (1119,1118,1117)
    ad au lieu de as !
    J'affirme péremptoirement que toute affirmation péremptoire est fausse
    5ième élément : barde-prince des figures de style, duc de la synecdoque
    Je ne réponds jamais aux questions techniques par MP

  18. #18
    Membre confirmé

    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    650
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 650
    Points : 546
    Points
    546
    Par défaut
    well one !!!

    mysql> select EVENEMENT_ID, MIN(DEBUT) as Deb FROM REPRESENTATION WHERE EVENEMENT_ID in (1119,1118,1117) GROUP BY EVENEMENT_ID ORDER BY Deb;
    +--------------+---------------------+
    | EVENEMENT_ID | Deb |
    +--------------+---------------------+
    | 1119 | 2005-08-20 08:00:00 |
    | 1117 | 2005-08-29 19:00:00 |
    | 1118 | 2005-08-31 19:00:00 |
    +--------------+---------------------+
    3 rows in set (0.00 sec)

    mysql> select EVENEMENT_ID, MIN(DEBUT) as Deb FROM REPRESENTATION WHERE EVENEMENT_ID in (1119,1118,1117) GROUP BY EVENEMENT_ID ORDER BY 2;
    +--------------+---------------------+
    | EVENEMENT_ID | Deb |
    +--------------+---------------------+
    | 1119 | 2005-08-20 08:00:00 |
    | 1117 | 2005-08-29 19:00:00 |
    | 1118 | 2005-08-31 19:00:00 |
    +--------------+---------------------+
    3 rows in set (0.00 sec)

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

Discussions similaires

  1. probleme avec distinct et order by
    Par meri_mima dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 15/10/2009, 17h07
  2. Probleme avec distinct
    Par sky88 dans le forum MS SQL Server
    Réponses: 20
    Dernier message: 29/07/2009, 00h47
  3. problem avec distinct
    Par anas.bah dans le forum PL/SQL
    Réponses: 4
    Dernier message: 11/03/2009, 12h35
  4. Probleme avec la clause SELECT DISTINCT
    Par jojodid dans le forum Requêtes et SQL.
    Réponses: 6
    Dernier message: 06/05/2008, 14h12
  5. probleme sur une requete avec DISTINCT
    Par samsso2006 dans le forum Requêtes
    Réponses: 1
    Dernier message: 06/05/2007, 14h35

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