Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2834 connectés 

  FORUM HardWare.fr
  Programmation

  sql: Je suis desespere !!!! Le suicide est proche :(

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

sql: Je suis desespere !!!! Le suicide est proche :(

n°24413
wouatouwou​atou
Posté le 12-04-2001 à 19:14:16  profilanswer
 

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]

mood
Publicité
Posté le 12-04-2001 à 19:14:16  profilanswer
 

n°24428
darkoli
Le Petit Dinosaure Bleu
Posté le 12-04-2001 à 20:58:21  profilanswer
 

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é.

n°24430
zop
1 world, 1 web, 1 Windows
Posté le 12-04-2001 à 21:18:12  profilanswer
 

Je compatis ...

n°24507
wouatouwou​atou
Posté le 13-04-2001 à 10:15:24  profilanswer
 

beuheuu... :(
 
:( :gun:

n°24510
petoulachi
A fortiori, brigadier chef
Posté le 13-04-2001 à 10:21:58  profilanswer
 

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 !

n°24515
petoulachi
A fortiori, brigadier chef
Posté le 13-04-2001 à 10:35:46  profilanswer
 

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 ?

n°24525
wouatouwou​atou
Posté le 13-04-2001 à 10:54:49  profilanswer
 

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:

n°24579
thegti
La constipation se soigne ...
Posté le 13-04-2001 à 13:23:03  profilanswer
 

Bah je te le fais ce week end
La je suis trop occupé :(
Mais bientôt le week end :) de trois jours :)

n°24600
Miles V
Posté le 13-04-2001 à 14:10:11  profilanswer
 

Les 2 opérations (qd il y en a 2), il te les faut sur la même ligne ou sur 2 lignes successives ?

n°24694
BENB
100% Lux.
Posté le 13-04-2001 à 15:50:44  profilanswer
 

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...

mood
Publicité
Posté le 13-04-2001 à 15:50:44  profilanswer
 

n°24748
wouatouwou​atou
Posté le 13-04-2001 à 17:37:24  profilanswer
 

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...

n°24750
jupiler
Un cousin...
Posté le 13-04-2001 à 17:39:27  profilanswer
 

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


---------------
Je ne suis ni pour, ni contre, bien au contraire  
n°24754
shinji
Posté le 13-04-2001 à 17:48:58  profilanswer
 

un select au milieu d'un from c'est la 1ère chose qu'on apprend à ne pas faire en cours!

n°25072
wouatouwou​atou
Posté le 17-04-2001 à 09:40:34  profilanswer
 

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

n°25099
mid
Posté le 17-04-2001 à 10:42:44  profilanswer
 

Pourquoi personne utilise de inner?


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation

  sql: Je suis desespere !!!! Le suicide est proche :(

 

Sujets relatifs
Plus de sujets relatifs à : sql: Je suis desespere !!!! Le suicide est proche :(


Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)