Bonjour,
je bloque sur une requête SQL ou plutôt la méthode à utiliser, j'espère que quelqu'un pourra m'aider.
Voici mon cas fonctionnel :
Des personnes saisissent leur planning sur le mois dans une interface. Ces personnes peuvent travailler dans plusieurs bureaux dans la même journée. Ma table PLANNING résultant de ces plannings ressemble à ça :
IDPERSONNE DATE IDBUREAU HEURE_DEBUT HEURE_FIN 1 26/09/2017 1 08:00 08:45 1 26/09/2017 1 09:00 10:00 1 26/09/2017 2 10:00 12:00 1 26/09/2017 1 13:00 15:00 1 26/09/2017 2 15:00 17:00 1 26/09/2017 1 17:00 18:00 2 02/09/2017 3 09:00 10:00 2 02/09/2017 3 10:00 12:00 2 02/09/2017 4 13:00 18:00 2 03/09/2017 3 09:00 10:00 2 03/09/2017 3 10:00 12:00 2 03/09/2017 4 13:00 18:00
Mon but est de connaître les personnes qui se déplacent de bureau en bureau dans la même journée. Je dois pouvoir connaître chaque déplacement fait sur une journée par une personne. A partir des données précédentes, ma table résultat DEPLACEMENT doit ressembler à ça :
IDPERSONNE DATE IDBUREAU1 HEURE_FIN_BUREAU1 IDBUREAU2 HEURE_DEBUT_BUREAU2 1 26/09/2017 1 10:00 2 10:00 1 26/09/2017 2 12:00 1 13:00 1 26/09/2017 1 15:00 2 15:00 1 26/09/2017 2 17:00 1 17:00 2 02/09/2017 3 12:00 4 13:00 2 03/09/2017 3 12:00 4 13:00
Maintenant je n'arrive pas à obtenir cette table DEPLACEMENT. Ce qui me pose problème dans les requêtes que j'ai essayé, ce sont surtout les personnes qui font plus de 2 déplacements dans une même journée (la personne avec l'ID 1 dans l'exemple). Je suis parti sur quelque chose comme ça :
Ce qui me pose souci bien évidemment lorsque la personne fait plus de 2 déplacements dans la journée.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 SELECT p1.IDPERSONNE, p1.DATE, p1.IDBUREAU, max(p1.HEURE_FIN), p2.IDBUREAU, min(p2.HEURE_DEBUT) FROM PLANNING p1 INNER JOIN PLANNING p2 on p1.IDPERSONNE=p2.IDPERSONNE and p1.DATE=p2.DATE and p1.HEURE_DEBUT < p2.HEURE_DEBUT WHERE p1.IDBUREAU <> p2.IDBUREAU GROUP BY p1.IDPERSONNE, p1.DATE
Comment vous y prendriez-vous pour faire cette requête?
Merci d'avance pour vos réponses.
Partager