Bonjour
désolé du post un peu long, mais je suis tout seul pour trouver une solution à un probleme, et je ne sais pas si je pars dans la bonne direction, mais j'aimerai faire des query pure SQL pour répondre à un besoin d'éviter des programme/script externes à SQL
j'ai une table de "logging" qui stocke des déroulement de sessions de tâches, avec une seule colonne de temps
dans une session j'ai des tache qui démarre, avec un id du type de tache
la fin de tache est un autre id de type de tache
une tache peut ne pas avoir de fin de tache, car la session est terminée
cela donne en exemple ceci
dans cet exemple j'ai une session qui démarre qui dure 30 minute entre le type 1 et 7 (start session, end session)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 id_session | id_type | timestamp 1 | 1 | 2022-03-10 10:00:00 1 | 2 | 2022-03-10 10:00:00 1 | 3 | 2022-03-10 10:05:00 1 | 4 | 2022-03-10 10:25:00 1 | 5 | 2022-03-10 10:20:00 1 | 2 | 2022-03-10 10:29:00 1 | 7 | 2022-03-10 10:30:00 2 | 1 | 2022-03-10 11:00:00 2 | 2 | 2022-03-10 11:00:00 2 | 3 | 2022-03-10 11:05:00 2 | 7 | 2022-03-10 10:05:00
et j'ai 3 sous-tache qui démarre avec l'id 2 et se termine avec le type 3 ou démarre avec l'id 4 et se termine avec l'id 5
je peux avoir plusieur tache de plusieur type différent (chacune avec son id de start et end, j'en ai 2 à gérer, je peux donc hardcoder que le type 2 et 3 vont ensemble, et 4 et 5 vont ensemble)
je dois calculer le temps des sessions et le temps des tâche, partant du principe que si je n'ai pas la fin de tache, c'est la fin de session qui compte pour la tache en cours.
(pour contexte, c'est une table de logging qui est dans une app propriétaire, qui logge comme cela et je n'ai pas la main dessus)
idéalement je souhaiterai obtenir 2 tables
table Session
Table tache
Code : Sélectionner tout - Visualiser dans une fenêtre à part ID_Session | Start | End | duration
le ID_Type ne serait que le l'id de démarrage (2 ou 4 dans mon exemple)
Code : Sélectionner tout - Visualiser dans une fenêtre à part ID_Session | ID_Type | Start | End | duration
j'ai codé l'algorithme a coup de programmation externe mais je souhaiterai faire cela au travers de query SQL pour sortir 2 table et essayer d'inclure cela dans un ETL qui n'aura pas besoin d'un programme externe. l'algorithme est assez "simple", je boucle sur l'id de session, j'itère chaque ligne avec des variables et dès que je trouve l'id de fin correspondant je stocke la date de fin associée a la date de début, et je calcule la durée, avec le cas ou la session se termine avec une tache en cours.
j'utilise SQL Server, je peux utiliser des procédures stockées si nécessaire et adapter l'algorithme que j'ai en c#, mais je me demandais si il existait un moyen de faire cela en query sans procédure/programmation et je ne suis pas assez avancé en SQL pour trouver comment faire, j'aimerai comprendre comment je peux arriver à ce résultat ou si c'est simplement impossible en SQL et qu'il faut que je passe par une procédure stockée, je peux me débrouiller avec cela
je peux rajouter des table comme l'association des id de début et fin de tache si cela peut simplifier la query
Merci d'avance, et d'avoir lu![]()
Partager