Bonjour, j'ai un petit problème avec une requête.

On me dit qu'elle est fausse (sans autre précision) mais j'ai beau la retourner dans tout les sens je ne trouve pas ce qui cloche.


Voici la requête :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
For those deactivated agents that are on more than seven missions,
change their deactivation date to the earliest deactivation date of all agents who were activated in the same year as
the agent you are currently updating.
Now create a copy of the updated AGENT table called blabla.
Voilà comment j'interprète la requête (j'aimerais bien qu'il s'agisse uniquement d'une faute de compréhension de la requête )

Pour les agents "retraités" qui ont effectués plus de sept mission, changer la date de leur "mise en retraite" pour la plus récente date de mise en retraite des agents qui ont été engagé la même année que l'agent en cours d'update.
ENSUITE, créer une copy des agents updaté dans une table nommée blabla.

Pour cette requête, j'ai besoin de travailler sur deux tables
La table agent contient :

Agent_id (PK)
Location_id (FK)
First_name
Last_name
Code_name
Security_level
Birth_date
activation_date
deactivation_date

la table mission_agents contient
mission_id (fk)
agent_id (fk)

Au besoin, je met aussi la table mission mais je ne pense pas qu'il y en ai besoin.

Mission :
mission_id (pk)
code_name
location_id (fk)
mission_type_id (fk)
mission_date
security_level


Voici ma requête :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
update agents a
set deactivation_date=
                    (
                        select 
                              max(deactivation_date)
                        from  
                              agents ag
                        where to_char(ag.activation_date,'yy')=to_char(a.activation_date,'yy')
                      )                      
where deactivation_date in 
                          ( 
                            select deactivation_date
                            from 
                                  (
                                    select 
                                          a.agent_id,
                                          a.deactivation_date, 
                                          count(*)
                                    from 
                                        agents a 
                                        inner join 
                                        missions_agents m 
                                        on a.agent_id=m.agent_id
                                    where a.deactivation_date is not null
                                    group by 
                                            a.agent_id, 
                                            a.deactivation_date
                                    having count(*)>7
                                    )
                          )
;
drop table am_x_442_1
;
create table am_x_442_1
as
select * 
from agents
where agent_id in
( 
                            select agent_id
                            from 
                                  (
                                    select 
                                          a.agent_id, 
                                          count(distinct m.mission_id)
                                    from agents a 
                                          inner join
                                          missions_agents ma 
                                          on a.agent_id=ma.agent_id 
                                          inner join
                                          missions m
                                          on ma.mission_id= m.mission_id
                                          where a.deactivation_date is not null
                                          group by a.agent_id
                                          having count(distinct m.mission_id)>7
                                          order by a.agent_id
                                    )
                          )
;
Piste d'erreur :

1- J'ai mal compris la question
2- J'ai fait une erreur bête
3- Il y a une fonction que je connais pas
4- Le "NOW" serait trompeur, peut être que l'on me demande de faire les deux choses en même temps, avec la création d'un trigger ...

Merci beaucoup pour votre aide, il en va de mon avenir dans le monde génial de l'informatique ...