J'ai un tableau qui suit les entretiens de la machine qui ont lieu à des moments arbitraires dans le temps. Voici une structure de table simplifiée :
Maintenance Table
----------------------------------------
ID - integer
DateCompleted - date
MachineName - varchar
et voici un exemple de données de table :
ID DateCompleted MachineName
----------------------------------------
1 1/6/2011 'Machine 1'
2 1/13/2011 'Machine 2'
3 1/14/2011 'Machine 1'
4 2/2/2011 'Machine 3'
5 2/26/2011 'Machine 1'
6 3/9/2011 'Machine 2'
7 4/20/2011 'Machine 3'
Ce que j'essaie de faire, c'est de créer une requête qui renvoie la date de la tâche de maintenance précédente pour chaque tâche. L'ensemble des résultats serait donc le suivant :
ID MachineName CurDate PrevDate
----------------------------------------
1 'Machine 1' 1/6/2011 NULL
2 'Machine 2' 1/13/2011 NULL
3 'Machine 1' 1/14/2011 1/6/2011
4 'Machine 3' 2/2/2011 NULL
5 'Machine 1' 2/26/2011 1/14/2011
6 'Machine 2' 3/9/2011 1/13/2011
7 'Machine 3' 4/20/2011 2/2/2011
Quelle serait la meilleure façon de rédiger une telle demande ? Ma seule idée jusqu'à présent serait quelque chose comme ça :
SELECT ID, MachineName, DateCompleted AS CurDate,
(
SELECT TOP 1 DateCompleted FROM Maintenance m2
WHERE m1.MachineName = m2.MachineName
AND m1.DateCompleted > m2.DateCompleted
ORDER BY DateCompleted DESC
) AS PrevDate
FROM Maintenance m1
ORDER BY ID
Toute réflexion, suggestion ou correction sera la bienvenue.