3 votes

Sélectionner la date précédente pour chaque ligne d'un tableau

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.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X