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 :

Probleme avec la fonction MAX


Sujet :

Requêtes MySQL

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 5
    Points : 1
    Points
    1
    Par défaut Probleme avec la fonction MAX
    Bonjour,

    J'ai un soucis avec une requête mysql qui ne me renvoie aucun résultat et qui utilise la fonction MAX. J'ai (presque) la même avec MIN qui marche bien. Je ne comprends pas d'où vient le problème. J'ai vérifié dans la table, il y a bien des enregistrements qui correspondent à la requête et les chaines de caractères correspondent aussi.
    Un peu d'aide serait la bienvenue...

    Code avec MIN qui marche :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT user, MIN(date) AS datemin 
    FROM log 
    WHERE text LIKE '%s\'est logué sur Camelot' 
    GROUP BY user 
    HAVING MIN(date) BETWEEN 1250200800 AND  1250287199
    Résultat pour MIN :

    hassan
    1250242946

    thierry
    1250242493


    Code avec MAX qui ne renvoie aucune ligne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT user, MAX(date) AS datemax 
    FROM log 
    WHERE text LIKE '%s\'est déconnecté(e).' 
    GROUP BY user 
    HAVING MAX(date) BETWEEN 1250200800 AND1250287199
    J'ai essayé cette requête qui me renvoie 5 entrées :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT * FROM log
    WHERE text LIKE '%s\'est déconnecté(e).'  
    HAVING date BETWEEN 1250200800 AND 1250287199

  2. #2
    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
    salut,

    ces utilisateurs n'auraient-ils pas une date qui est supérieure à 1250287199?
    dans ce cas, cette condition
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    HAVING MAX(date) BETWEEN 1250200800 AND 1250287199
    devient fausse, donc tu ne retournes aucune ligne

  3. #3
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    Non, non, il y a bien des enregistrements dans la table, j'ai vérifié :

    La requête suivante renvoie bien des lignes, donc le MAX devrait renvoyer qqchose...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT * FROM log 
    WHERE text LIKE '%s\'est déconnecté(e).'
    HAVING date BETWEEN 1250200800 AND 1250287199
    Résultat de la requête :

    date - user - text
    1250243331 - thierry - thierry s'est déconnecté(e).
    1250243026 - thierry - thierry s'est déconnecté(e).
    1250242501 - thierry - thierry s'est déconnecté(e).
    1250244499 - thierry - thierry s'est déconnecté(e).
    1250244776 - thierry - thierry s'est déconnecté(e).
    Donc ma requête avec MAX devrait me renvoyer la dernière ligne, j'comprends vraiment pas pourquoi ça marche pas...

  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
    salut,

    et que te renvoie ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT user, MAX(date) AS datemax
    FROM log
    WHERE text LIKE '%s\'est déconnecté(e).'
    GROUP BY user
    HAVING date BETWEEN 1250200800 AND 1250287199

  5. #5
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    Ca renvoie une erreur par rapport à la ligne :
    HAVING date BETWEEN 1250200800 AND 1250287199.
    'date' n'est pas connu.

    Par contre si je mets :
    HAVING MAX(date) BETWEEN 1250200800 AND 1250287199.
    ça ne me renvoie aucune ligne.

    Merci d'essayer de résoudre le problème

  6. #6
    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
    oups, j'ai dit une bêtise

    que te retourne ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT user, MAX(date) AS datemax
    FROM log
    WHERE text LIKE '%s\'est déconnecté(e).' and user = 'thierry'
    GROUP BY user

  7. #7
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    Ca me renvoie ça :

    user - datemax
    thierry - 1256023029

    Le truc c'est que je veux pas spécialement pour un user précis puisqu'il peut y en avoir plusieurs, et je veux aussi dans un intervalle de date donné.

  8. #8
    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
    salut,

    cette requête était pour tester une chose
    c'est normal que la requête avec having ne te renvoie rien puisque 1256023029 n'est pas compris entre 1250200800 et 1250287199

  9. #9
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    Normal puisque les intervalles ne sont pas renseignés...
    Justement, je voudrais récupérer la date maxi qui se situe entre un intervalle donné.

  10. #10
    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
    bon,
    la 1ere requete que tu as écrit est : je veux l'utilisateur et le max de la date quand le max de la date est dans un intervalle donné
    ce que tu souhaite est : utilisateur et max de la date dans un intervalle donné
    c'est donc différent

    il ne faut donc pas de clause having mais une clause where

    ce qui donne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT user, MAX(date) AS datemax 
    FROM log 
    WHERE text LIKE '%s\'est déconnecté(e).'
    AND date BETWEEN 1250200800 AND 1250287199
    GROUP BY user

Discussions similaires

  1. Probleme avec la fonction Ontimer
    Par Djule dans le forum MFC
    Réponses: 8
    Dernier message: 27/11/2005, 17h52
  2. Probleme avec la fonction rename()
    Par TheZenZen dans le forum C
    Réponses: 6
    Dernier message: 08/10/2005, 15h59
  3. [LG] Problème avec la Fonction ReadLn en fin de programme
    Par killermano dans le forum Langage
    Réponses: 6
    Dernier message: 23/07/2005, 15h16
  4. [LG]Probleme avec une fonction
    Par xavier1936 dans le forum Langage
    Réponses: 7
    Dernier message: 08/02/2005, 22h48

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