Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Access > Requêtes et SQL.
Requêtes et SQL. Tout ce qui concerne vos questions sur les requêtes et le SQL sous Access se trouve ici.
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 30/05/2011, 17h14   #1
Candidat au titre de Membre du Club
 
Inscription : novembre 2008
Messages : 63
Détails du profil
Informations forums :
Inscription : novembre 2008
Messages : 63
Points : 14
Points : 14
Par défaut Expression Max + Mois

Bonjour,
J'ai une table dans laquelle je rentre des données mensuelles par commune.
Voici le descriptif de la Table "Volume Commune"
CommuneId
MoisId
AnneeId
Volume

Je souhaite réaliser une requête qui permet de trouver le mois pour lequel on a le plus grand volume pour une année.
Pour le moment avec l'expression Max, j'obtiens le volume en question et impossible d'y affecter le mois correspondant à ce volume.
Merci de votre aide
Nana35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/05/2011, 18h07   #2
Membre Expert
 
Inscription : août 2006
Messages : 1 435
Détails du profil
Informations forums :
Inscription : août 2006
Messages : 1 435
Points : 1 753
Points : 1 753
Bonsoir,
cela pourrait être
Code :
1
2
3
4
5
6
7
 
SELECT NomTable.MoisId 
FROM NomTable 
WHERE (((NomTable.volume) In 
                            (SELECT max(NomTable.volume) 
                             FROM NomTable;))) 
GROUP BY NomTable.MoisId;
helas est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/05/2011, 10h19   #3
Candidat au titre de Membre du Club
 
Inscription : novembre 2008
Messages : 63
Détails du profil
Informations forums :
Inscription : novembre 2008
Messages : 63
Points : 14
Points : 14
Bonjour avec cette requête j'obtiens effectivement le mois pour lequel on a un volume max.
Mais la requête se fait sur l'ensemble des communes et l'ensemble des années.
Sauf que je souhaite le mois où l'on rencontre un volume max pour chaque année et sur chaque commune.
cad si j'ai 10 communes et deux années la requête me trouve 20 mois.
Merci de ton aide
Nana35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/05/2011, 18h08   #4
Membre Expert
 
Inscription : août 2006
Messages : 1 435
Détails du profil
Informations forums :
Inscription : août 2006
Messages : 1 435
Points : 1 753
Points : 1 753
Bonsoir,
il suffit d'ajouter la commune et l'année dans la requete

Code :
1
2
3
 
SELECT NomTable.CommuneId, NomTable.AnneeId, NomTable.MoisId FROM NomTable
WHERE (((NomTable.volume) In (SELECT max([NomTable].[volume]) FROM NomTable;)));
helas est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/05/2011, 19h35   #5
Expert Confirmé Sénior
 
Avatar de f-leb
 
Homme Fabien
Enseignant
Inscription : janvier 2009
Messages : 2 415
Détails du profil
Informations personnelles :
Nom : Homme Fabien
Âge : 41
Localisation : France, Sarthe (Pays de la Loire)

Informations professionnelles :
Activité : Enseignant

Informations forums :
Inscription : janvier 2009
Messages : 2 415
Points : 4 446
Points : 4 446
bonsoir,

Citation:
Envoyé par Nana35 Voir le message
...cad si j'ai 10 communes et deux années la requête me trouve 20 mois.
donc pour le moment tu obtiens le volume maxi avec la requête:
Code sql :
1
2
3
SELECT CommuneId, AnneeId, Max(Volume) AS VolumeMaxi
FROM [Volume Commune]
GROUP BY CommuneId, AnneeId

c'est ça ?
f-leb est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/06/2011, 08h25   #6
Candidat au titre de Membre du Club
 
Inscription : novembre 2008
Messages : 63
Détails du profil
Informations forums :
Inscription : novembre 2008
Messages : 63
Points : 14
Points : 14
Bonjour,
C'est ça. Pour le moment, j'otiens le volume max avec le mois (donc 1 seul résultat) et pas l'ensemble des mois de "pointe" de chaque année de chaque commune.
Je continue de chercher mais c'est surement tout con.
Nana35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/06/2011, 18h57   #7
Expert Confirmé Sénior
 
Avatar de f-leb
 
Homme Fabien
Enseignant
Inscription : janvier 2009
Messages : 2 415
Détails du profil
Informations personnelles :
Nom : Homme Fabien
Âge : 41
Localisation : France, Sarthe (Pays de la Loire)

Informations professionnelles :
Activité : Enseignant

Informations forums :
Inscription : janvier 2009
Messages : 2 415
Points : 4 446
Points : 4 446
Heu bon, c’est pas très clair… Je reprends…

R_VolMax :
Code sql :
1
2
3
4
5
6
SELECT communeid,
       anneeid,
       MAX(volume) AS volumemaxi
FROM   [Volume Commune]
GROUP  BY communeid,
          anneeid

Cette requête fait un regroupement par commune et par année

Code :
1
2
3
4
5
6
CommuneId     AnneeId         VolumeMaxi
    1		2009            2500
    1           2010            3012
    2           2009            1450
    2           2010            1520
…
Citation:
Envoyé par nana35
Sauf que je souhaite le mois où l'on rencontre un volume max pour chaque année et sur chaque commune.
cad si j'ai 10 communes et deux années la requête me trouve 20 mois.
La requête R_VolMax ne permet pas en effet de dire quel est le mois de l’année où est obtenu ce volume maximal. R_VolMax doit donc être utilisée comme sous-requête pour récupérer le mois :

Code sql :
1
2
3
4
5
6
7
8
9
SELECT t.communeid,
       t.anneeid,
       t.moisid,
       t.volume
FROM   [Volume Commune] t
       INNER JOIN [r_volmax] u
         ON t.communeid = u.communeid
            AND t.anneeid = u.anneeid
WHERE  t.volume = u.volumemaxi

En espérant avoir bien compris la demande…
f-leb est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/06/2011, 10h00   #8
Candidat au titre de Membre du Club
 
Inscription : novembre 2008
Messages : 63
Détails du profil
Informations forums :
Inscription : novembre 2008
Messages : 63
Points : 14
Points : 14
Ok pour la sous requête.
Merci beaucoup
Nana35 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 17h27.


 
 
 
 
Partenaires

Hébergement Web