我有一個表格,用於跟蹤發生在任意時間點的機器維護情況。這裏有一個簡單的表結構:選擇表格中每一行的前一個日期
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
任何想法,建議或修正將是非常歡迎的。
您使用的是什麼RDBMS? – Lamak 2012-01-13 19:39:49
微軟,但我歡迎任何解決方案。 – Sparafusile 2012-01-13 19:44:34
「Microsoft」不是RDBMS。 「SQL Server」是一個dbms。我爲你加了標籤。 – 2012-01-13 20:00:55