Précédent   Forum des professionnels en informatique > Bases de données > Langage SQL
Langage SQL Forum d'entraide sur le langage SQL et sur les questions liées à la conception de schéma (DDL). Cours SQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 11/07/2011, 15h05   #1
Membre habitué
 
Avatar de berti
 
Inscription : août 2007
Messages : 214
Détails du profil
Informations personnelles :
Âge : 32

Informations forums :
Inscription : août 2007
Messages : 214
Points : 125
Points : 125
Par défaut problème avec Max date

J'utilise une requête SQL pour afficher la taxe la plus récente

Code :
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 :
1
2
3
clé    num                date                taxe
99    numcontact1    2011-06-18     0
100  numcontact1    2011-10-31     31.5
au lieu de
Code :
1
2
clé    num                date                taxe
99    numcontact1    2011-06-18     0
Merci de m'aider si quelqu'un voit l'erreur...
berti est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/07/2011, 15h13   #2
Membre Expert
 
Homme
Responsable de service informatique
Inscription : janvier 2009
Messages : 1 085
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 38
Localisation : France

Informations professionnelles :
Activité : Responsable de service informatique
Secteur : Boutique - Magasin

Informations forums :
Inscription : janvier 2009
Messages : 1 085
Points : 1 883
Points : 1 883
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 :
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 ?
tatayo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/07/2011, 15h24   #3
Membre habitué
 
Avatar de berti
 
Inscription : août 2007
Messages : 214
Détails du profil
Informations personnelles :
Âge : 32

Informations forums :
Inscription : août 2007
Messages : 214
Points : 125
Points : 125
la requête ne fonctionne pas...

voila l'erreur :

Code :
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
berti est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/07/2011, 16h49   #4
Membre Expert
 
Homme
Responsable de service informatique
Inscription : janvier 2009
Messages : 1 085
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 38
Localisation : France

Informations professionnelles :
Activité : Responsable de service informatique
Secteur : Boutique - Magasin

Informations forums :
Inscription : janvier 2009
Messages : 1 085
Points : 1 883
Points : 1 883
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 :
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.
tatayo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/07/2011, 16h55   #5
Modérateur
 
Homme Fabien
Ingénieur d'études en décisionnel
Inscription : septembre 2008
Messages : 5 684
Détails du profil
Informations personnelles :
Nom : Homme Fabien
Âge : 34
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Ingénieur d'études en décisionnel
Secteur : Arts - Culture

Informations forums :
Inscription : septembre 2008
Messages : 5 684
Points : 10 431
Points : 10 431
Envoyer un message via ICQ à Waldar Envoyer un message via Skype™ à Waldar
Je crois en effet que MySQL avant la version 5 ne sait pas gérer les sous-requêtes.
Essayez celle-ci :
Code :
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.
__________________
Email : http://scr.im/waldar
Waldar est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/07/2011, 15h15   #6
Membre habitué
 
Avatar de berti
 
Inscription : août 2007
Messages : 214
Détails du profil
Informations personnelles :
Âge : 32

Informations forums :
Inscription : août 2007
Messages : 214
Points : 125
Points : 125
merci pour vos réponses
berti est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 23h51.


 
 
 
 
Partenaires

Hébergement Web