Inner join en delphi [Résolu]

cs_sidalilo 108 Messages postés mardi 28 février 2006Date d'inscription 9 juillet 2013 Dernière intervention - 30 mars 2009 à 15:20 - Dernière réponse : cs_cantador 4996 Messages postés dimanche 26 février 2006Date d'inscription 27 mars 2018 Dernière intervention
- 5 avril 2009 à 18:48
J'ai une requête (une sous-requëte retournant une table) du genre<?XML:NAMESPACE PREFIX = O /??>






 






SELECT *





FROM (SELECT  champ1, AVG (champ2), champ3






           
  FROM tbl1






           
  GROUP BY champ3) T1






            INNER JOIN (SELECT champ4, champ5






                                   FROM (SELECT  champ1, AVG (champ2), champ3






           
 
                                 FROM tbl1






           
 
 
                                 GROUP BY champ3) ) T2






            ON T1.champ1=T2.champ2






 







 

Dans L'IDE Delphi, événement sur clic d'un bouton





Nom de TQuery = qryBulletin





je tape ce qui suit














 

qryBulletin.Sql.Add ('SELECT *') ;





qryBulletin.Sql.Add ('FROM (SELECT  champ1, AVG (champ2), champ3'






           
 
                     
            + 'FROM tbl1'





+ 'GROUP BY champ3) T1 ;





qryBulletin.Sql.Add   ('INNER JOIN (SELECT champ4, champ5 '






                                + ' FROM (SELECT  champ1, AVG (champ2), champ3 '






           
 
                                 + ' FROM tbl1 '






           
 
                                 + 'GROUP BY champ3) ) T2 ') ;





qryBulletin.Sql.Add ('ON T1.champ1 =T2.champ2') ;














mais à l'exécution quand je clique sur le bouton

il y a un message d'erreur (Invalid use of key token SELECT line 2)  signalé à la ligne 2 sur le SELECT



Aidez moi svp !
Afficher la suite 

6 réponses

Répondre au sujet
cs_Delphiprog 4580 Messages postés samedi 19 janvier 2002Date d'inscription 9 janvier 2013 Dernière intervention - 4 avril 2009 à 13:27
+3
Utile
Alors, pour commencer, je te conseille de renommer ton champ "date" en "date_xxx" parce que :
1 - xxx donnera une indication sur le type de date contenu dans ce champ
2 - "date" est un mot réservé du SQL et tu ne devrais pas l'utiliser sauf si tu veux te créer des problèmes
La requête devient  lors tout simplement :
SELECT t1.symbole, t1.achat, t1.vente, t1.date_x as "date"
FROM test t1
WHERE t1.date_x = (SELECT MAX(t2.date_x) FROM test t2 WHERE t2.symbole=t1.symbole)

Résultat obtenu (au format CSV):
"symbole","achat","vente","date"
"Euro",112.2,113.4,"2009-04-04"
"SUD",80.5,90.5,"2009-03-15"

Pour tester ce code, voici le code de création utilisé pour la table :
CREATE TABLE  `sidalilo`.`test` (
  `symbole` varchar(10) default 'Euro',
  `achat` float default NULL,
  `vente` float default NULL,
  `date_x` date default NULL
) ;

Cordialement,

May Delphi be with you
<hr />
Pensez à cliquer sur Réponse acceptée lorsque la réponse vous convient.
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de cs_Delphiprog
cs_cantador 4996 Messages postés dimanche 26 février 2006Date d'inscription 27 mars 2018 Dernière intervention - 3 avril 2009 à 20:38
0
Utile
bonsoir,

j'ai pas testé (je suppose que c'est du SQL paradoxe..)
mais je rajouterai :
SELECT *<?XML:NAMESPACE PREFIX = O /??>

FROM (SELECT  champ1, AVG (champ2) as Moyenne1, champ3

FROM tbl1

GROUP BY champ3) T1

INNER JOIN (SELECT champ4, champ5

FROM (SELECT  champ1, AVG (champ2) as Moyenne2, champ3

FROM tbl1

GROUP BY champ3) ) T2

ON T1.champ1=T2.champ2

cantador
Commenter la réponse de cs_cantador
cs_Delphiprog 4580 Messages postés samedi 19 janvier 2002Date d'inscription 9 janvier 2013 Dernière intervention - 4 avril 2009 à 11:29
0
Utile
@sidalilo : pourrais-tu préciser le type de base de données utilisée ?

May Delphi be with you<hr />Pensez à cliquer sur Réponse acceptée lorsque la réponse vous convient.
Commenter la réponse de cs_Delphiprog
cs_sidalilo 108 Messages postés mardi 28 février 2006Date d'inscription 9 juillet 2013 Dernière intervention - 4 avril 2009 à 12:29
0
Utile
bonjour..
merci delphiprog pour votre attention.
je travail sur une base de données paradox et le probleme toujour est que j'arrive pas de faire ce resultat en sql :


je travail sur une base de données paradox avec sql en delphi et je veux afficher les dernieres dates pour chaque enregistrement sauvegardé dans la base de données,ca veut dire les maximales date pour chaqu'un


pour bien expliquer si un enregistrement des enregistrements possede la date d'aujourdhui alors sa date maximale va étre afficher est la date d'aujourdhui biensur avec ses informations.


exemple:



Symbole   Achat    Vente         Date

Euro        112      113          20/03/2009
Euro        112.3     113.5     25/03/2009
Euro        112.2     113.4     04/04/2009
SUD        80         90           10/03/2009
SUD        80.5      90.5        15/03/2009

maintenant le resultat je veux en sql  c'est:
Euro        112.2     113.4     04/04/2009
SUD        80.5      90.5        15/03/2009
 j'espere que vous avez compris mon probleme et je vous remercie toujour pour votre attention et je attend votre reponse.
cordialement sidalilo.
Commenter la réponse de cs_sidalilo
cs_sidalilo 108 Messages postés mardi 28 février 2006Date d'inscription 9 juillet 2013 Dernière intervention - 4 avril 2009 à 15:10
0
Utile
merci bien delphiprog maintenant mon probleme est resolu
c'est grace à toi
je vous remercie encore pour votre attention.

cordialement sidalilio.
Commenter la réponse de cs_sidalilo
cs_cantador 4996 Messages postés dimanche 26 février 2006Date d'inscription 27 mars 2018 Dernière intervention - 5 avril 2009 à 18:48
0
Utile
de la moyenne au maximum...

cantador
Commenter la réponse de cs_cantador

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.