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 :

Distinct sur un seul champ...


Sujet :

Langage SQL

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 58
    Points : 50
    Points
    50
    Par défaut Distinct sur un seul champ...
    Bonjour à tous,

    Bon alors, j'imagine bien que ce sujet a déjà dû être traité plusieurs fois mais... j'ai rien trouvé de convaincant...

    Je souhaiterais faire un select distinct mais qui ne derais le distinct que sur un seul champ (ou 2), mais pas tous!

    J'ai essayé plusieurs choses:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    select distinct id, date from table where nom = 'toto'
    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    select id, date from table where nom = 'toto' group by id, date
    Ce que je veux, c'est uniquement les enregistrement qui ont des id et des dates différentes... Mais j'y arrive pas!

    Help pleaz

  2. #2
    Expert confirmé

    Profil pro
    Inscrit en
    Avril 2002
    Messages
    3 338
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 338
    Points : 4 657
    Points
    4 657
    Par défaut
    Bah normalement ta requete

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select id, date from table where nom = 'toto' group by id, date
    Doit te renvoyer que ceux qui ont des id et dates <> en regroupant ceux qui sont commun.

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 58
    Points : 50
    Points
    50
    Par défaut
    et pourtant....

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    select id, date from transactions where nom = 'toto' group by id, date
    me renvoie 4 lignes identiques:

    id ---- date
    5 ----- 03/01/2005 12:16:27
    5 ----- 03/01/2005 12:16:27
    5 ----- 03/01/2005 12:16:27
    5 ----- 03/01/2005 12:16:27

    ... J'y comprend plus rien

  4. #4
    Expert confirmé

    Profil pro
    Inscrit en
    Avril 2002
    Messages
    3 338
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 338
    Points : 4 657
    Points
    4 657
    Par défaut
    Peut-etre un soucis sur la date alors...

    Essaye de lancer un group by d'un coté sur id tout seul , et de l'autre sur date tout seul pour voir.

  5. #5
    Membre habitué Avatar de nantais
    Inscrit en
    Juillet 2004
    Messages
    158
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 158
    Points : 192
    Points
    192
    Par défaut
    Cela peut provenir de tes dates qui ne sont pas nécessairement égales.

    En effet, certains SGBD (dont Oracle) conservent aussi dans les dates les secondes, mais qui ne sont pas affichées par défaut. Ainsi à l'affichage tu crois que les dates sont égales, ce qui n'est pas le cas dans ta table...

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 58
    Points : 50
    Points
    50
    Par défaut
    Youpi, merci les amis....
    Bon ben c'était bien les dates... et pourtant elles s'affichent à la seconde près... c'est bizarre... Une idée sur comment je pourrai faire pour pouvoir les grouper aussi?

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 58
    Points : 50
    Points
    50
    Par défaut
    parce que en fait, le problème c'est que quand je fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select id, date from table where nom = 'toto' group by id
    Il me dit...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    La colonne 'transactions.Date' n'est pas valide dans la liste de sélection parce qu'elle n'est pas contenue dans une fonction d'agrégation ou dans la clause GROUP BY.

  8. #8
    Membre habitué Avatar de nantais
    Inscrit en
    Juillet 2004
    Messages
    158
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 158
    Points : 192
    Points
    192
    Par défaut
    Pour cela il faut formater ta colonne date.

    Sous quel SGBD travailles tu et sous quelle format souhaites tu voir apparaitre tes dates?

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 58
    Points : 50
    Points
    50
    Par défaut
    je suis sous SQL Server 2000.
    Les dates devraient apparaitre en jj/mm/aaaa mais ca c'est pas très grave, je m'en occupe après...

  10. #10
    Membre habitué Avatar de nantais
    Inscrit en
    Juillet 2004
    Messages
    158
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 158
    Points : 192
    Points
    192
    Par défaut
    Je ne connais pas la fonction de formatage de date sous sql serveur.

    Je te le donne sous Oracle (to_char) et je te laisse trouver la bonne fonction :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    select id, to_char(ta_date,'JJ/MM/YYYY') 
    from table 
    where nom = 'toto' 
    group by id, to_char(ta_date,'JJ/MM/YYYY')
    Cela devrait fonctionner...

  11. #11
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 58
    Points : 50
    Points
    50
    Par défaut
    Bon alors j'ai fait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select id, convert(varchar,date) from table where (nom='toto') group by id, convert(varchar,date)
    et j'obtiens
    id ---- date
    5 ----- janv 3 2005 12:16PM

    C'est presque ca, il faut que je m'occupe du format

  12. #12
    Membre habitué Avatar de nantais
    Inscrit en
    Juillet 2004
    Messages
    158
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 158
    Points : 192
    Points
    192
    Par défaut
    En cherchant, j'ai vu que tu peux faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    select id, round(date,'DD/MM/YYYY') from table where (nom='toto') group by id, round(date,'DD/MM/YYYY')

  13. #13
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 58
    Points : 50
    Points
    50
    Par défaut
    J'ai essayé avec round, mais je comprends pas

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select id, round(date,'DD/MM/YYYY') from table where (nom='toto') group by id, round(date,'DD/MM/YYYY')
    Il me met:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Type de données varchar incorrect pour l'argument 2 de la fonction round.

  14. #14
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 58
    Points : 50
    Points
    50
    Par défaut
    Bon, ca avance, ca avance...
    Mais c'est pas encore ca!

    Ca, ca marche:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select id, convert(varchar,datepart("dd",date)) from table group by id, convert(varchar,datepart("dd",date))
    Ca aussi:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select id, convert(varchar,datepart("mm",date)) from table group by id, convert(varchar,datepart("mm",date))
    Mais comment je peux faire pour avoir un format dd/mm/yyyy?????

    Parce que ca:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select id, convert(varchar,datepart("dd/mm/yy",date)) from table group by id, convert(varchar,datepart("dd/mm/yy",date))
    ..ben ca marche pas

  15. #15
    Membre habitué Avatar de nantais
    Inscrit en
    Juillet 2004
    Messages
    158
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 158
    Points : 192
    Points
    192
    Par défaut
    Il faut bien mettre le format de la date en majuscules :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    select id, convert(varchar,datepart("DD/MM/YYYY",date)) from table group by id, convert(varchar,datepart("DD/MM/YYYY",date))

  16. #16
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 58
    Points : 50
    Points
    50
    Par défaut
    Même en majuscule j'ai la même erreur...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    'DD/MM/YYYY' n'est pas une option datepart reconnue.

  17. #17
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 58
    Points : 50
    Points
    50
    Par défaut
    Youpi, j'ai trouvé!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select id, convert(varchar, date, 103) as date from table where nom='toto' group by id, convert(varchar,date,103)
    Bon ben ca fait plaisir, c'est pas trop tot!!!

    Merci à tous!

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

Discussions similaires

  1. Distinct d'un seul champ sur un objet
    Par kohsaka dans le forum Linq
    Réponses: 2
    Dernier message: 31/05/2011, 08h13
  2. DISTINCT sur un seul champ
    Par justinedr71 dans le forum Développement
    Réponses: 6
    Dernier message: 06/07/2010, 13h27
  3. Utilisation de Distinct sur un seul champ!
    Par Bils dans le forum Langage SQL
    Réponses: 10
    Dernier message: 21/11/2007, 09h31
  4. [9i, débutant] Clause DISTINCT sur un seul champ
    Par JYves dans le forum Oracle
    Réponses: 11
    Dernier message: 06/09/2006, 17h08
  5. [Débutant] DISTINCT sur une seule des colonnes ?
    Par Neilos dans le forum Langage SQL
    Réponses: 9
    Dernier message: 23/06/2004, 23h04

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