sql: Je suis desespere !!!! Le suicide est proche :( - Programmation
Marsh Posté le 12-04-2001 à 20:58:21
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é.
Marsh Posté le 13-04-2001 à 10:21:58
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 !
Marsh Posté le 13-04-2001 à 10:35:46
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 ?
Marsh Posté le 13-04-2001 à 10:54:49
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...
Merci [g]infiniment{/g] d'y réfléchir :jap:
Marsh Posté le 13-04-2001 à 13:23:03
Bah je te le fais ce week end
La je suis trop occupé
Mais bientôt le week end de trois jours
Marsh Posté le 13-04-2001 à 14:10:11
Les 2 opérations (qd il y en a 2), il te les faut sur la même ligne ou sur 2 lignes successives ?
Marsh Posté le 13-04-2001 à 15:50:44
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...
Marsh Posté le 13-04-2001 à 17:37:24
Mile V > il me faut les deux sur la même ligne.
Mais ca y est.. je crois ke j'ai trouvé 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
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...
Marsh Posté le 13-04-2001 à 17:39:27
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
Marsh Posté le 13-04-2001 à 17:48:58
un select au milieu d'un from c'est la 1ère chose qu'on apprend à ne pas faire en cours!
Marsh Posté le 17-04-2001 à 09:40:34
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...
Marsh Posté le 12-04-2001 à 19:14:16
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:
).

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
Voila !!! c t long je sais mais siouplez aider moi !!
[edit]--Message édité par wouatouwouatou--[/edit]