| |||||
| Dernière réponse | |
|---|---|
| Sujet : sql: Je suis desespere !!!! Le suicide est proche :( | |
| mid | Pourquoi personne utilise de inner? |
| Aperçu |
|---|
| Vue Rapide de la discussion |
|---|
| mid | Pourquoi personne utilise de inner? |
| wouatouwouatou | et pkoi pas ds un from ??
C plus rapide il me semble, paske geré differemment.. non ? Enfin, c juste pour savoir si yavait kkun pour m'optimiser tout ca... :D |
| shinji | un select au milieu d'un from c'est la 1ère chose qu'on apprend à ne pas faire en cours! |
| jupiler | 1) un select en plein milieu d'un from, ca me parait bizarre
2) en supposant que ca marche ca doit pas etre top rapide |
| wouatouwouatou | Mile V > il me faut les deux sur la même ligne.
Mais ca y est.. je crois ke j'ai trouvé :D trop [G]heureux[/g] !!! Vous pouvez pas savoir... Ca faisait pres d'une semaine ke jetais dessus.. Vous voulez la voir ? Mais elle est tres tres longue... Car je vous fais un copie/coller et donc elle est complète (j'ai rien retiré) Maintenant, faudrait ke kkun me dise si elle fait bien ce que je veux... une sore de correction koi :D Voici ma requete si ca interesse tjrs kkun :) SELECT p.pers_id, DECODE(p.priority_id,'0','0','1') priorite, p.rela_id, DECODE(concat(concat(DECODE(rtrim(p.pers_lname),null,'',rtrim(p.pers_lname)),' '),DECODE(rtrim(p.pers_fname),null,'',rtrim(p.pers_fname))),' ','---',concat(concat(DECODE(rtrim(p.pers_lname),null,'',rtrim(p.pers_lname)),' '),DECODE(rtrim(p.pers_fname),null,'',rtrim(p.pers_fname)))) full_name, DECODE(p.pers_private_phone,null,DECODE(p.pers_office_phone,null,DECODE(p.pers_mobil_phone,null,'0','1'),'1'),'1') telephone, DECODE(p.pers_email,null,'0','1') email, DECODE(p.pers_prospect,'2','1','0') internet, o_con.oper_id operation_de_contact, o_rel.oper_id operation_de_relance, o_rel.oper_realisation_date date_de_relance, ot_rel.oper_type_description motif_de_relance, DECODE(t1.date_contact,null,'NA',concat(concat(rtrim(ot_con.oper_type_description),'/'),rtrim(s_con.status_short_label))) precedente, o_con.operation_date derniere_date, o_rel.operation_date relance_date, max(o_rel.oper_realisation_date) max_date_de_relance, p.pers_prospect FROM person p, operation o_rel, operation_type ot_rel, operation_group og_rel, operation o_con, operation_type ot_con, operation_group og_con, status s_con, ( SELECT o1.oper_pers_id, max(o1.operation_date) date_relance, max(o2.operation_date) date_contact FROM operation o1, operation_type ot1, operation o2, operation_type ot2, operation_group og2, status s2 WHERE -- opération de derniere relance -- critères de sélection de l'opération de relance o1.affected_user_id=82 AND o1.oper_type_id=ot1.oper_type_id AND ot1.oper_group_id=og2.oper_group_id AND o1.oper_realisation_date is not null AND o1.oper_realisation_date <= sysdate -- opératon de dernier contact -- critères de sélection de l'opération de relance AND o2.oper_pers_id(+)=o1.oper_pers_id AND o2.affected_user_id=o1.affected_user_id -- status de l'opération (différent de 'Lancé') AND o2.oper_last_status_id=s2.status_id AND lower(s2.status_short_label)<>'lancé' AND o2.oper_type_id=ot2.oper_type_id AND ot2.oper_group_id=og2.oper_group_id -- type d'opération : relance AND lower(og2.oper_group_description)='relance' GROUP BY o1.oper_pers_id HAVING max(o2.operation_date)<=max(o1.operation_date) ) t1 WHERE p.pers_id=t1.oper_pers_id -- opération de relance -- critères de sélection de l'opération de relance AND o_rel.affected_user_id=p.pers_affected_user_id AND o_rel.oper_pers_id=t1.oper_pers_id AND o_rel.operation_date=t1.date_relance AND o_rel.oper_type_id=ot_rel.oper_type_id AND ot_rel.oper_group_id=og_rel.oper_group_id AND lower(og_rel.oper_group_description)='relance' -- opératon de contact -- critères de sélection de l'opération de relance AND o_con.oper_pers_id=o_rel.oper_pers_id AND o_con.affected_user_id=o_rel.affected_user_id AND o_con.operation_date=t1.date_contact -- status de l'opération AND o_con.oper_last_status_id=s_con.status_id AND lower(s_con.status_short_label)<>'lancé' AND o_con.oper_type_id=ot_con.oper_type_id AND ot_con.oper_group_id=og_con.oper_group_id AND lower(og_con.oper_group_description)='relance' GROUP BY p.pers_id, DECODE(p.priority_id,'0','0','1'), p.rela_id, DECODE(concat(concat(DECODE(rtrim(p.pers_lname),null,'',rtrim(p.pers_lname)),' '),DECODE(rtrim(p.pers_fname),null,'',rtrim(p.pers_fname))),' ','---',concat(concat(DECODE(rtrim(p.pers_lname),null,'',rtrim(p.pers_lname)),' '),DECODE(rtrim(p.pers_fname),null,'',rtrim(p.pers_fname)))), DECODE(p.pers_private_phone,null,DECODE(p.pers_office_phone,null,DECODE(p.pers_mobil_phone,null,'0','1'),'1'),'1'), DECODE(p.pers_email,null,'0','1'), DECODE(p.pers_prospect,'2','1','0'), o_con.oper_id, o_rel.oper_id, o_rel.oper_realisation_date, ot_rel.oper_type_description, DECODE(t1.date_contact,null,'NA',concat(concat(rtrim(ot_con.oper_type_description),'/'),rtrim(s_con.status_short_label))), o_con.operation_date, o_rel.operation_date, p.pers_prospect ORDER BY date_de_relance desc, full_name asc Désolé pour les smileys... |
| BENB | Pour l'histoire de la derniere operation et de l'avant derniere, je me ferais pas chier...
Fait ton SELECT avec un tri par date... comme ca la derniere operation c'est la premiere ligne et l'avant derniere c'est la deuxieme ligne que tu ne lis que si la premiere est de type xx... Je ne sais pas si c'est possible mais sinon bon courage... |
| Miles V | Les 2 opérations (qd il y en a 2), il te les faut sur la même ligne ou sur 2 lignes successives ? |
| thegti | Bah je te le fais ce week end
La je suis trop occupé :( Mais bientôt le week end :) de trois jours :) |
| wouatouwouatou | OUPS... Je viens de m'apercevoir ke j'ai mal formuler un point tres tres important ..et c d'ailleur ca ki m'emmer.. le plus
Désolé... revoyez le message.. je vai essayer de le reédité... C a propos du : Si l'operation est du type 'xx'... Ben, faut prendre en fait les deux !!!! c a dire la derniere operation ainsi ke la précédente... Désolé encore une fois... :jap: Merci [g]infiniment{/g] d'y réfléchir :jap::jap: |
| petoulachi | bon bon bon
j'avance , j'y suis presque d'ailleurs. (enfin je crois) voila le debut : select nom, prenom, id_fixe, pers_id, description, date_fixe, date_modif from personne,operation, op_type where pers_id = op_pers_id and operation.op_type_id = op_type.op_type_id and user_id like '%n%' (là je c pas trop, c peut etre que 'n' dans ton cas') and date_modif = (select .... voila j'en suis là. il me semble que ce qu'il faudrait faire c'est : a l'aide des ensembles (union et tout ça) , tu vires toutes les operations du type xx, puis ensuite, dans l'ensemble obtenu, tu prend celle dont la date de modif est max. alors ? |
| petoulachi | ouagf ouaf le jeu de mot avec ta CP id_fixe.... c en rapport avec asterix ou pas?
non plus serieusement je me penche sur le pb là, j'ai meme sorti papier crayon et tout.... je m'etonne a vouloir faire de l'SQL , moi qui ai horreur de ça. mais bon tu a l'air desemparé alors je vasi tenter ! |
| wouatouwouatou | beuheuu... :(
:( :gun: |
| zop | Je compatis ... |
| darkoli | désolé je ne peux pas te repondre. Moi quand j'avais des requetes chiantes a faire, je faisais plein de petites requetes et ensuite je m'amusais en javascript, mais c'etait pour un intranet alors c'etait justifié. |
| wouatouwouatou | Voila... ca fait une semaine et ke dalle... j'y arrive pas c tout. Alors je solicite votre aide a tous... merci de m'aider :jap::jap:
Le pb. en tres tres gros : Extraire des donnees de trois tables. Ca semble simple, hien ? Mais j'y arrive pas. Je suis sous ORACLE 8 Hypotheses: 3 tables: personne, operation, et operation_type, dont les champs sont : - personn : nom, prenom, id_fixe, user_id et pers_id (PK) - operation : date_fixe, op_pers_id(FK sur personne), op_id(PK), op_type_id (FK sur operation_type), date_modif - operation_type : op_type_id (PK), description Ce que je veux faire : :??: - extraire : le nom, le prenom, l'id fixe, le pers_id, le type d'operation (description), la date fixe et la date de derniere modification. Conditions : C la ke ca se corse... Car elles sont impossible a satisfaire.. enfin, d'aprs moi... :( - Je veux le nom et prenom ainsi ke le pers_id et l'id_fixe des personnes dont le user_id vaut n. - Je veux aussi l'operation la plus recemment modifiee (date_modif) avec sa description et sa date fixe, pour chacune de ces personnes. - De plus si l'operation est de type (description) 'xx' alors prendre aussi l'opération précédente (juste avant celle-ci, du point de vue de la date de modification). - Et pour couronner le tout, FAIRE CELA EN SQL EN UNE SEULE REQUETE (voire avec des sous-requetes imbriquées et/ou corélées). - C'est à dire pas de curseur, proc. stoc., ni de fonc. stoc. (enfin, si vous avez une soluce avec ces derniers, jsuis preneurs qd meme :D ). Voila !!! c t long je sais mais siouplez aider moi !! :cry: [edit]--Message édité par wouatouwouatou--[/edit] |




