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 :

erreur 1054 - clause having


Sujet :

Requêtes MySQL

  1. #1
    Membre régulier
    Inscrit en
    Novembre 2006
    Messages
    236
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 236
    Points : 78
    Points
    78
    Par défaut erreur 1054 - clause having
    Bonjour,

    Je fais appel à vous car j'ai une erreur sur ma requete que je n'arrive pas a resoudre...

    Voici ma requete:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    SELECT t.id, t.date, min( f.date ) AS PEC, count( r.dateincde ) 
    FROM tracking t, followups f, r_bigcal r
    WHERE holidayincde =99
    AND f.tracking = t.id
    AND date( r.dateincde ) >= date( t.date ) 
    GROUP BY t.id, t.date
    HAVING min( date( f.date ) ) <= date( r.dateincde )
    J'ai l'erreur:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    #1054 - Unknown column 'r.dateincde' in 'having clause'
    Le champ existe bien...
    J'ai essayé également un r.dateincde between date(t.date) and min( date( f.date ) )
    et j'ai la même erreur...


    Vs pouvez m'aider? c'est urgent

  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 040
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Loiret (Centre)

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

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

    Essaie en faisant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ...
    HAVING PEC <= date( r.dateincde )
    ced

  3. #3
    Membre régulier
    Inscrit en
    Novembre 2006
    Messages
    236
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 236
    Points : 78
    Points
    78
    Par défaut
    J'ai exactement la même erreur en mettant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    HAVING PEC <= date( r.dateincde )
    C'est qd meme bizarre...elle est pourtant correcte ma requete, non?

  4. #4
    Membre expert
    Avatar de Maljuna Kris
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2005
    Messages
    2 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 613
    Points : 3 950
    Points
    3 950
    Par défaut
    Saluton,
    Je ne crois pas que ta requête soit correcte car la clause having doit intervenir sur le résultat du GROUP BY qui ne contient plus la colonne à laquelle tu te réfères.

  5. #5
    Membre régulier
    Inscrit en
    Novembre 2006
    Messages
    236
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 236
    Points : 78
    Points
    78
    Par défaut
    Oui mais je ne peux pas faire de group by sur un min ou un count?

  6. #6
    Membre expert
    Avatar de Maljuna Kris
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2005
    Messages
    2 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 613
    Points : 3 950
    Points
    3 950
    Par défaut
    Dans la clause having tu ne peux te référer qu'à des colonnes choisies dans la projection initiale (SELECT), or tu n'y sélectionne pas r.dateincde mais count(r.dateincde), d'où le message d'erreur.
    Après, comme je ne comprends pas grand chose à ta pseudo-jointure entre les 3 tables, je ne peux guère t'en dire plus.

  7. #7
    Membre régulier
    Inscrit en
    Novembre 2006
    Messages
    236
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 236
    Points : 78
    Points
    78
    Par défaut
    En fait,
    Je veux compter le nombre de jour ouvré par ID entre t.date et min(f.date).

    Le "between" (ou l'inégalité) se fait sur 2 tables différentes.
    Je joins un dessin-schéma très simplifié de la base.

    Si vs avez d'autres requetes a me proposer, je suis totalement dispo car là je galere...
    Images attachées Images attachées  

  8. #8
    Membre expert
    Avatar de Maljuna Kris
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2005
    Messages
    2 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 613
    Points : 3 950
    Points
    3 950
    Par défaut
    Et tout simplement comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT t.id, t.date, min( f.date ) AS PEC, count( r.dateincde ) 
    FROM tracking t, followups f, r_bigcal r
    WHERE holidayincde =99
    AND f.tracking = t.id
    AND date( r.dateincde ) >= date( t.date ) 
    AND min( date( f.date ) ) <= date( r.dateincde )
    GROUP BY t.id, t.date
    Ça ne le fait pas ?

  9. #9
    Membre régulier
    Inscrit en
    Novembre 2006
    Messages
    236
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 236
    Points : 78
    Points
    78
    Par défaut
    Si je fais cette requete, j'obtiens l'erreur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    #1111 - Invalid use of group function
    Ce qui est normal car le calcul sur le min n'est pas accepté dans un where.

  10. #10
    Membre expert
    Avatar de Maljuna Kris
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2005
    Messages
    2 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 613
    Points : 3 950
    Points
    3 950
    Par défaut
    le min n'est pas accepté dans un where.
    Sauf dans une sous-requête corrélée :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    AND
    (SELECT min( date( f2.date ) )  FROM followups f2 WHERE f2.tracking = t.id) <= date( r.dateincde ) 
    GROUP BY t.id, t.date

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

Discussions similaires

  1. Erreur #1054 champ .. inconnu on clause
    Par Fred92390 dans le forum Requêtes
    Réponses: 3
    Dernier message: 26/08/2010, 15h33
  2. erreur : #1054 - Unknown column 'Martin' in 'where clause'
    Par éric1 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 14/08/2009, 16h29
  3. clause having
    Par Hisander dans le forum Oracle
    Réponses: 5
    Dernier message: 16/02/2006, 15h52
  4. [SQL] Clause Having
    Par Lou Pitchoun dans le forum Access
    Réponses: 2
    Dernier message: 20/10/2005, 15h03
  5. [Report 6i] clause having paramétré
    Par Herveg dans le forum Oracle
    Réponses: 5
    Dernier message: 14/07/2005, 12h35

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