Salut à tous,



Je cherche depuis quelques temps à régler un problème de doublons: j'ai consulté avec interêt le chapitre qui leur sont consacrés mais malgré tout, je ne parvient pas à en venir à bout...

Etant un nouveau membre, je vais faire un effort pour respecter au mieux les règles de présentation afin que ma requète soit la plus claire possible...

Je travaille sur Oracle iSQL*Plus

Voici ma table DDL:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
CREATE TABLE liste_agents
( agent_id NUMBER(4),
  first_name VARCHAR2(20),
  last_name VARCHAR2(20),
  birth_date DATE
);

...Et son contenu DDL:


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
INSERT INTO liste_agents VALUES (1,'Coty','Colt',TO_DATE('26-DEC-1985:13:46:08', 'DD-MON-YYYY:HH24:MI:SS'));

INSERT INTO liste_agents VALUES (2,'Diamond','Filmore',TO_DATE('15-JUL-1985:00:40:16', 'DD-MON-YYYY:HH24:MI:SS'));

INSERT INTO liste_agents VALUES (3,'Skye','Breck',TO_DATE('12-JUL-1967:09:08:35', 'DD-MON-YYYY:HH24:MI:SS'));

INSERT INTO liste_agents VALUES (4,'Hazlett','Molyneux',TO_DATE('23-NOV-1961:15:25:12', 'DD-MON-YYYY:HH24:MI:SS'));

INSERT INTO liste_agents VALUES (5,'Ava','Bullions',TO_DATE('26-MAY-1985:01:35:39', 'DD-MON-YYYY:HH24:MI:SS'));

INSERT INTO liste_agents VALUES (6,'Grayson','Lightfoot',TO_DATE('04-FEB-1958:03:51:39', 'DD-MON-YYYY:HH24:MI:SS'));

INSERT INTO liste_agents VALUES (7,'Holman','Boyd',TO_DATE('05-FEB-1957:18:43:13', 'DD-MON-YYYY:HH24:MI:SS'));

INSERT INTO liste_agents VALUES (8,'Fleta','Cheever',TO_DATE('18-JUN-1957:22:30:47', 'DD-MON-YYYY:HH24:MI:SS'));

INSERT INTO liste_agents VALUES (9,'Charlton','Carden',TO_DATE('24-JAN-1985:07:44:28', 'DD-MON-YYYY:HH24:MI:SS'));

INSERT INTO liste_agents VALUES (10,'Skelton','Marsh',TO_DATE('25-JAN-1934:04:58:02', 'DD-MON-YYYY:HH24:MI:SS'));

INSERT INTO liste_agents VALUES (11,'Aswin','Wilbraham',TO_DATE('02-FEB-1957:11:42:57', 'DD-MON-YYYY:HH24:MI:SS'));

INSERT INTO liste_agents VALUES (12,'Egbert','Biddulph',TO_DATE('20-MAR-1971:23:52:29', 'DD-MON-YYYY:HH24:MI:SS'));

INSERT INTO liste_agents VALUES (13,'Darthmouth','Huband',TO_DATE('25-FEB-1971:02:14:12', 'DD-MON-YYYY:HH24:MI:SS'));

INSERT INTO liste_agents VALUES (14,'Madison','Kirkpatrick',TO_DATE('07-MAR-1944:22:58:08', 'DD-MON-YYYY:HH24:MI:SS'));

INSERT INTO liste_agents VALUES (15,'Edda','Keith',TO_DATE('30-JUL-1949:02:21:40', 'DD-MON-YYYY:HH24:MI:SS'));

INSERT INTO liste_agents VALUES (16,'Landon','Cunningham',TO_DATE('03-APR-1971:12:56:46', 'DD-MON-YYYY:HH24:MI:SS'));

INSERT INTO liste_agents VALUES (17,'Radborne','Witherington',TO_DATE('18-MAY-1944:17:04:52', 'DD-MON-YYYY:HH24:MI:SS'));

INSERT INTO liste_agents VALUES (18,'Brooke','Kirtland',TO_DATE('26-APR-1985:21:13:10', 'DD-MON-YYYY:HH24:MI:SS'));

INSERT INTO liste_agents VALUES (19,'Salton','Vibbard',TO_DATE('17-MAY-1971:10:48:24', 'DD-MON-YYYY:HH24:MI:SS'));

INSERT INTO liste_agents VALUES (20,'Rockwell','Cam',TO_DATE('22-JUN-1957:06:53:46', 'DD-MON-YYYY:HH24:MI:SS'));

Ces valeurs ne sont pas exhaustives, mais bon c'est juste pour expliquer le principe...

Mon but est d'identifier tous les couples qui partagent la même année de naisssance:


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
SELECT

      ag1,

      ag2

FROM
(
    SELECT

                        a1.first_name||' '||a1.last_name ag1,

                        a2.first_name||' '||a2.last_name ag2

                  FROM
                              liste_agents a1

                        INNER JOIN
                              liste_agents a2

                        ON
to_char(a1.birth_date,'YYYY') = to_char(a2.birth_date,'YYYY')

                  WHERE
                        a1.agent_id <> a2.agent_id

)

ORDER BY         ag1;

Comme vous l'avez peut-être deviné je cherche à éliminer les doublons de couples qui apparaissent inéluctablement (en rouge):


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
ag1                               ag2
-----------------            -----------------
 
Aswin Wilbraham              Fleta Cheever  
Aswin Wilbraham              Holman Boyd  
Aswin Wilbraham              Rockwell Cam  
Ava Bullions                    Charlton Carden  
Ava Bullions                    Coty Colt  
Ava Bullions                    Brooke Kirtland  
Ava Bullions                    Diamond Filmore  
Brooke Kirtland                Diamond Filmore  
Brooke Kirtland                Ava Bullions  
Brooke Kirtland                Charlton Carden  
Brooke Kirtland                Coty Colt  
Charlton Carden               Diamond Filmore  
Charlton Carden               Coty Colt  
Charlton Carden               Ava Bullions  
Charlton Carden               Brooke Kirtland  
Coty Colt                        Charlton Carden  
Coty Colt                        Diamond Filmore  
Coty Colt                        Brooke Kirtland  
Coty Colt                        Ava Bullions  
Darthmouth Huband          Salton Vibbard  
Darthmouth Huband          Landon Cunningham  
Darthmouth Huband          Egbert Biddulph  
Diamond Filmore               Ava Bullions  
Diamond Filmore               Coty Colt 

Etc...

Je crois que tout y est.
Si quelq'un aurait une solution à proposer elle serait la bienvenue...

D'avance merci
a+