У меня есть таблица, которая отслеживает обслуживание машины, которое происходит в произвольные моменты времени. Вот упрощенная структура таблицы:Выберите предыдущую дату для каждой строки в таблице
Maintenance Table
----------------------------------------
ID - integer
DateCompleted - date
MachineName - varchar
и вот некоторые примеры данных таблицы:
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'
То, что я пытаюсь сделать, это создать запрос, который возвращает дату от предыдущей задачи обслуживания для каждого задача. Таким образом, результирующий набор будет выглядеть так:
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
Какой был бы лучший способ написать такой запрос? Моя единственная идея до сих пор было бы что-то вроде этого:
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
Любые мысли, предложения или поправки были бы весьма желательны.
Какие СУБД вы используете? – Lamak
Microsoft, но я приветствую решения для любого. – Sparafusile
«Microsoft» не является РСУБД. «SQL Server» - это dbms. Я отметил его для вас. –