Bonjour,

J'ai un petit soucis conceptuel en SQL et j'aurais bien besoin de l'avis d'experts en la matière
J'ai la table suivante qui liste les evenements associés aux entrées/sorties d'une personne:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
ID_EV, HORODATAGE, SENS, ID_PERSONNE
1, 18/10/2009 12H04, Entree, 34
2, 18/10/2009 14H04, Entree, 33
3, 18/10/2009 15H10, Sortie, 34
1, 18/10/2009 16H27, Entree, 34
1, 18/10/2009 18H39, Sortie, 34
4, 18/10/2009 23H10, Sortie, 33
Ce que je voudrais avoir c'est le résultat suivant,

Code : Sélectionner tout - Visualiser dans une fenêtre à part
jour, Id_personne,premiere_entree, derniere_entree, premiere_sortie, derniere_sortie
En fait je veux ce résultat, car il est possible pour une personne d'avoir plusieurs entrée et pas de sortie ou l'inverse, du coup je dois faire des calculs avec ces informations disponible.


Ma démarche:

Première tentative:
- un join des deux requêtes suivantes et un groupage par personne pour avoir les champs sur une seule ligne:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
select to_char(horodatage,'dd/mm/yyyy'), ID_PERSONNE, min(horodatage), max(horodatage)
from evenement
group by to_char(horodatage,'dd/mm/yyyy'), ID_PERSONNE, SENS
where sens='Entree'
et
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
select to_char(horodatage,'dd/mm/yyyy'), ID_PERSONNE, min(horodatage), max(horodatage)
from evenement
group by to_char(horodatage,'dd/mm/yyyy'), ID_PERSONNE, SENS
where sens='Sortie'
Ca marche, seulement cela ne me paraît pas optimisé (2 run sur une même table de l'ordre du million de lignes)


Deuxième tentative:
- je cherche à faire le tout en une requête, j'ai donc commencé par celle la:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
select to_char(horodatage,'dd/mm/yyyy'), ID_PERSONNE, min(horodatage), max(horodatage)
from evenement
group by to_char(horodatage,'dd/mm/yyyy'), ID_PERSONNE, SENS
Cela me donne ce résultat :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
 
18/10/2009, 34, Entree, 18/10/2009 12H04, 18/10/2009 16H27
18/10/2009, 34, Sortie, 18/10/2009 15H10, 18/10/2009 18H39
Mais là, je ne vois plus la suite pour arriver à l'objectif visé. Peut être un self join ?

Auriez-vous eventuellement des idées pour arriver à mon résultat ?

Merci d'avance.