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:
Ce que je voudrais avoir c'est le résultat suivant,
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
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.
Code : Sélectionner tout - Visualiser dans une fenêtre à part jour, Id_personne,premiere_entree, derniere_entree, premiere_sortie, derniere_sortie
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:
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='Entree'
Ca marche, seulement cela ne me paraît pas optimisé (2 run sur une même table de l'ordre du million de lignes)
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'
Deuxième tentative:
- je cherche à faire le tout en une requête, j'ai donc commencé par celle la:
Cela me donne ce résultat :
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
Mais là, je ne vois plus la suite pour arriver à l'objectif visé. Peut être un self join ?
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
Auriez-vous eventuellement des idées pour arriver à mon résultat ?
Merci d'avance.
Partager