INNER JOIN sur une valeur minimale
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.
Code:
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 |
Pour le moment, je suis arrivé à ça :
Code:
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 |
La jointure me donnerais les résultats suivants :
Code:
1 2 3 4 5
|
V10 - V11
V10 - V12
V11 - V12
V20 - V21 |
Et je cherche à avoir pour chaque Event uniquement la jointure avec la Date la plus petite :
Code:
1 2 3 4
|
V10 - V11
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.
Help. :calim2:
Edit : Résolu =)
Code:
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 |