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 :

problème avec Max date


Sujet :

Langage SQL

  1. #1
    Membre habitué Avatar de berti
    Profil pro
    Inscrit en
    Août 2007
    Messages
    239
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 239
    Points : 175
    Points
    175
    Par défaut problème avec Max date
    J'utilise une requête SQL pour afficher la taxe la plus récente

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT NUM_TAXE, NUM_CONTACT, Max( DATE ) AS MaxDeDATE, NUITES, PERSONNES, MONTANT, REGLEMENT
    FROM taxe_sejour
    GROUP BY NUM_TAXE, NUM_CONTACT, NUITES, PERSONNES, MONTANT, REGLEMENT
    HAVING NUM_CONTACT = 'identifiant'
    Toutefois il ne m'affiche pas du tout la bonne donnée il m'affiche toute la donnée correspondant au contact

    par exemple

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    clé    num                date                taxe
    99    numcontact1    2011-06-18     0
    100  numcontact1    2011-10-31     31.5
    au lieu de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    clé    num                date                taxe
    99    numcontact1    2011-06-18     0
    Merci de m'aider si quelqu'un voit l'erreur...

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 243
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 243
    Points : 12 874
    Points
    12 874
    Par défaut
    Bonjour,
    C'est normal, tu affiches la dernière date par NUM_TAXE, NUM_CONTACT, NUITES, PERSONNES, MONTANT, REGLEMENT !

    Tu as plusieurs façons de retrouver la dernière date, par exemple:
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    SELECT NUM_TAXE, NUM_CONTACT, DATE  AS MaxDeDATE, NUITES, PERSONNES, MONTANT, REGLEMENT
    FROM taxe_sejour
    where NUM_CONTACT = 'identifiant' 
    and date = max(select date from taxe_sejour  as ts1 where ts1.num_contact = taxe_sejour.num_contact)

    Tu peux aussi faire une jointure, utiliser not exists...

    Tatayo.

    P.S. pourquoi avoir mis le critère sur le numero de contact dans la clause HAVING, au lieu de la clause WHERE ?

  3. #3
    Membre habitué Avatar de berti
    Profil pro
    Inscrit en
    Août 2007
    Messages
    239
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 239
    Points : 175
    Points
    175
    Par défaut
    la requête ne fonctionne pas...

    voila l'erreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Erreur
    requête SQL:  
     
    SELECT NUM_TAXE, NUM_CONTACT, DATE AS MaxDeDATE, NUITES, PERSONNES, MONTANT, REGLEMENT
    FROM taxe_sejour
    WHERE NUM_CONTACT = 'identifiant'
    AND date = max( 
    SELECT date
    FROM taxe_sejour AS ts1
    WHERE ts1.num_contact = taxe_sejour.num_contact ) 
     
    MySQL a répondu: 
     
    #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 'SELECT date FROM taxe_sejour  AS ts1 WHERE ts1.num_contact = taxe_sejour.num_con' at line 2

  4. #4
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 243
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 243
    Points : 12 874
    Points
    12 874
    Par défaut
    Date est un mot réservé, ça lui pose peut-être problème... ou alors c'est MySql le problème

    Tu peux essayer aver une jointure externe:
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    SELECT ts1.NUM_TAXE, ts1.NUM_CONTACT, ts1.DATE AS MaxDeDATE, ts1.NUITES, ts1.PERSONNES, ts1.MONTANT, ts1.REGLEMENT
    FROM taxe_sejour as ts1
    left outer join taxes_sejour as ts2 on ts1.num_contact = ts2.num_contact and ts1.date < ts2.date
    WHERE ts1.NUM_CONTACT = 'identifiant' and ts2.num_contact is null

    Tatayo.

  5. #5
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 453
    Points : 18 388
    Points
    18 388
    Par défaut
    Je crois en effet que MySQL avant la version 5 ne sait pas gérer les sous-requêtes.
    Essayez celle-ci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    select ts1.NUM_TAXE, ts1.NUM_CONTACT, ts1.DATE AS MaxDeDATE
         , ts1.NUITES, ts1.PERSONNES, ts1.MONTANT, ts1.REGLEMENT
      from taxe_sejour as ts1
           inner join (SELECT num_contact, max(date) as dt_max
                         FROM taxe_sejour AS ts1
                     GROUP BY num_contact) as ts2
             on ts2.num_contact = ts1.num_contact
            and ts2.dt_max      = ts1.date
    Si ça ne fonctionne pas, mettre ce que j'ai appelé ts2 dans une vue.

  6. #6
    Membre habitué Avatar de berti
    Profil pro
    Inscrit en
    Août 2007
    Messages
    239
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 239
    Points : 175
    Points
    175
    Par défaut
    merci pour vos réponses

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

Discussions similaires

  1. problème avec MAX(Date)
    Par ouchemhou dans le forum Langage SQL
    Réponses: 12
    Dernier message: 23/08/2008, 17h13
  2. problème avec les dates nulles
    Par shingo dans le forum SQL Procédural
    Réponses: 1
    Dernier message: 30/09/2005, 12h32
  3. probléme avec une date/string dans un CommandText
    Par critok dans le forum Bases de données
    Réponses: 5
    Dernier message: 09/02/2005, 15h30
  4. [SQL] problème avec les date et les group By
    Par Stef784ever dans le forum Langage SQL
    Réponses: 3
    Dernier message: 23/11/2004, 09h18
  5. Interbase - dbExpress -> problème avec les dates
    Par marghett dans le forum Bases de données
    Réponses: 4
    Dernier message: 02/07/2004, 03h55

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