begin process at 2012 05 27 00:33:57
  Trouver un code source :
 
dans
 
Accueil > Forum > 

SQL

 > 

Access

 > 

Requêtes

 > 

Probleme select...max


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Probleme select...max

jeudi 16 septembre 2010 à 10:28:18 | Probleme select...max

pcarme

Bonjour,
je dispose d'une table contenant les champs suivants :
N°_societe
N°_INSEE
N°_ilot
surface
produit

La requete suivante fonctionne et me donne la surface max par ilot tout en affichant la société.

SELECT N°_societe, N°_ilot, MAX(SURFACE) AS [surface max]
FROM ma_table
GROUP BY N°_societe, N°_ilot;

Je souhaite maintenant, afficher en plus le N°insee et le produit associé à cette surface max par ilot.

Et là, blocage, je n'y arrive pas (mon SQL commence à être sérieusement rouillé ).
Merci pour votre aide...
jeudi 16 septembre 2010 à 11:14:48 | Re : Probleme select...max

DARKSIDIOUS

Membre Club Administrateur CodeS-SourceS
Salut,

Si ton produit et ton numéro insee sont uniques dans ton groupe, alors ajoute les dans ta clause group by, sinon, tu ne pourras pas faire de select dessus : il n'est pas possible de faire un select d'un champ qui n'est pas contenu dans la clause GROUP BY et qui n'a pas une fonction d'agrégat, par exemple :

SELECT NOM, PRENOM, SUM(AGE) FROM Personne GROUP BY NOM

Ca ne passera pas, car tu peux avoir plusieurs personnes de même nom mais avec des prénoms différents !

Alors que :
SELECT NOM, PRENOM, SUM(AGE) FROM Personne GROUP BY NOM, PRENOM

Ca passera, mais le groupe sera différent.
______________________________________

AVANT de poster votre message, veuillez lire, comprendre, et appliquer notre réglement
jeudi 16 septembre 2010 à 13:29:16 | Re : Probleme select...max

pcarme

Merci pour ta réponse,
le problème est que :
- 1 société peux être présente sur plusieurs N°_insee, et qu'un même N°_ilot peut avoir plusieurs produits....(elle est dure la vie...)

Aussi, ne serait-il pas possible d'agir en 2 temps :
1/ exécuter ma 1ere requête et stocker le résultat dans une table (tout en recopiant
le N° d'indexation [numeroauto] des lignes considérées)
2/ faire une requête select dans la table originale du N°_Insee et du produit avec, comme condition "afficher n°_insee et produit si N° d'index des 2 tables est égal"

Si c'est réalisable (et j'aimerai bien, ma table "pèse" 19000 lignes...), comment faire??
jeudi 16 septembre 2010 à 13:41:04 | Re : Probleme select...max

DARKSIDIOUS

Membre Club Administrateur CodeS-SourceS
Salut,

Ce n'est pas aussi simple, comme je te l'ai dit, la clause GROUP BY indique que les lignes sont groupées selon les critiques indiqués, donc, si tu prends la table :

id nom prenom age
1 toto titi 20
2 toto tata 21
3 titi tutu 22

Si tu fais :
SELECT NOM, SUM(AGE) FROM Personne GROUP BY NOM

Ca va te renvoyer :

toto 41
titi 22

mais à partir de cà, tu ne peux pas savoir que les toto en question, c'est les id 1 et 2.

Il faut alors faire une seconde requête pour chaque ligne retournée par ta requête :
SELECT id, Nom FROM TableTemporaire WHERE NOM = "toto"

Et là tu pourra savoir les id correspondant pour chaque ligne, mais si ta première requete te renvoie 10 000 lignes... cela implique que tu fasses 10 000 requetes pour récupérer les id...

Après, il doit être possible de faire cà avec des requêtes imbriquées, et si tu as mis les bons indexes, ca devrait aller relativement vite, du style (à adapter, je suis pas sûr que ca fonctionne) :
SELECT id, Nom, SumAge.Age FROM (SELECT NOM As SumNom, SUM(AGE) AS SumAge FROM Personne GROUP BY NOM) AS SumTable INNER JOIN Personne ON SumTable.NOM = Personne.Nom

______________________________________

AVANT de poster votre message, veuillez lire, comprendre, et appliquer notre réglement
mardi 28 septembre 2010 à 23:47:23 | Re : Probleme select...max

Zlub

Membre Club

Salut,

Sur quelle base de données tu travailles ? quelle est la version de ton serveur ?

Existe-t-il plusieurs N°insee par ilot ?
comment connais-tu les produits actuellement sur un ilot ?
Peux-tu donner la structure des tables qui sont à mettre en relation ? tu n'as qu'une table ?
Peux-tu donner un exemple de données que tu stockes ?

Bref, sans ces précision et dans l'absolu, via une requête imbriquée comme l'indique DARKSIDIOUS tu devrais pouvoir obtenir se que tu souhaites.

Code :
SELECT id, Nom, SumAge.Age 
FROM (SELECT NOM As SumNom, SUM(AGE) AS SumAge FROM Personne GROUP BY NOM) AS SumTable 
INNER JOIN Personne ON SumTable.NOM = Personne.Nom 


Attention toutes les bases de données n'acceptent pas les requêtes imbriquées. A vérifier que ta base de données et que la version de ton serveur gère cette fonctionnalité.


Sinon autre option serait de passer par une table temporaire que tu peux alimenter via un INSERT INTO SELECT ... puis faire des update dessus.



++

Zlub


Cette discussion est classée dans : select, max, surface, societe, ilot


Répondre à ce message

Sujets en rapport avec ce message

Help pour une requete !!! [ par Rouk ] Bonjour,Je developpe une application en vb.net qui a une connection a un serveur SQL.Dans mon application, je remplis un datagrid par une requete, voi Selection de tables [ par Rouk ] Bonjour,je debeloppe en vb.net un datagrid alimente par une base sqlje voudrai faire une selection des tables que j'affiche dans le datagrid.SELECT enlever les accents lors d'un select [ par momotaro ] momotaroBonjour,Je voudrais savoir s'il y a un moyen quand on récupère des données avec un select, d'enlever les accents sur les caractères avant d'ob SELECT sur un serveur SQL distant [ par Datadis ] Bonjour tout le monde,Quelqu'un peut-il m'aider à faire un SELECT sur un serveur SQL distant.Par exemple, j'ai une procédure stockée qui s'exécute sur Faire plusieurs if dans un procedure stockee [ par chris81 ] bonjour,comment puis je faire pour verifier plusiseurs if dans la meme procedure stockee c'est a direif not exist(SELECT Id FROM...) et if not exists( Select sans doublon avec date la plus recente [ par ironnyc ] Bonjour a tous!je cherche a faire une requete Select avec une base MySql sur la table suivante: #Table "historique"+-----+-------------+------------+| Problème de select avec un like [ par vincentstryckmans ] Salut, En Delphi  7, j'utilise les composants InterbaseExpress pour communiquer avec Interbase. Une de mes requêtes est du type : select id, num_rel Select * from uneProcedureStockee [ par lutin2004 ] Bonjour, je voudrais faire une requête du style Select * from uneProcedureStockee where critere = "ccccc" Qui s'apparenterait en fait à un tri des rés TVA sur ma requete [ par spoque ] bonjour à tous,comment faire pour rajouter la TVA (7,6%) sur cette requete?Merci d'avance(select sum(compte) from (SELECT (COUNT (ID)*10) as compte FR select replace [ par yan_j ] bonjour,je cherche a savoir comment faire pour lorsque je passe une requete select sur une table qu'il me retourne 0 lorsque la valeur et M et 1 lorsq


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,622 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales