Bonjour,
J'ai deux tables. Une table Group et une table Event.
Un Event est en relation avec un Group et dispose d'une Date. Un Group peut être en relation avec plusieur Event sous la seul contrainte que la Date soit unique.
Un Event a une EndDate qui est calculé en fonction de la Date de l'event suivant. Un Event prend fin dès qu'un autre du même Group débute.
J'aimerais faire un UPDATE qui me met à jour la EndDate de tout mes Event.
Pour le moment, je suis arrivé à ça :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 GROUPE G1 EVENT V10 01/01/2015 EVENT V11 03/01/2015 EVENT V12 05/01/2015 GROUPE G2 EVENT V20 01/01/2015 EVENT V21 03/01/2015
La jointure me donnerais les résultats suivants :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 UPDATE V1 SET T1.EndDate = T2.Date FROM Event Event T1 INNER JOIN Event T2 ON T1.Group_Id = T2.Group_Id AND T1.Date < T2.Date
Et je cherche à avoir pour chaque Event uniquement la jointure avec la Date la plus petite :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 V10 - V11 V10 - V12 V11 - V12 V20 - V21
J'avais l'idée de faire un ORDER BY sur la date de la table jointe et de faire un Distinct sur l'id de l'Event mais je n'arrive à rien pondre de syntaxiquement correcte.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 V10 - V11 V11 - V12 V20 - V21
Help.
Edit : Résolu =)
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 UPDATE A1 SET A1.DateFin = A2.MinDateFin FROM Event A1 INNER JOIN ( SELECT B1.Id, MIN(B2.DateFin) AS MinDateFin FROM Event B1 INNER JOIN ( SELECT C1.Id, C2.Date AS DateFin FROM Event C1 INNER JOIN Event C2 ON C1.Groupt_Id = C2.Group_Id AND C1.DateEffet < C2.DateEffet ) B2 ON B1.Id = B2.Id GROUP BY B1.Id ) A2 ON A1.Id = A2.Id
Partager