2012-05-10 149 views
3

我對SQL沒有壞處,但我很難弄清楚這一點。SQL更新查詢

我有一個表叫test,一個名爲key和兩個datetime列名爲TestTimeLastTestTime字符列。

我想寫一個查詢,將更新所有行,並將LastTestTime的值設置爲最新的前TestTime對於相同的key

這裏是我多麼希望這變成一個例子:

key testTime lastTestTime 
------------------------------ 
aaa 1/1/2012 null 
aaa 1/2/2012 1/1/2012 
aaa 1/3/2012 1/2/2012 
+2

你在使用mysql,oracel,mssql? – Arion

+0

這是Microsoft SQL Server。我已經嘗試了下面建議的「hspain」,但SQL Server似乎不允許在UPDATE語句中使用表別名。 –

回答

2

這些都不回答了這個問題。提問者希望在每次測試之前獲得最近的測試時間,而不是最近的總體測試時間:

UPDATE test 
    SET lastTestTime = (SELECT TOP(1) testTime 
         FROM test tt 
         WHERE test.key = tt.key AND tt.TestTime < test.TestTime 
         ORDER BY testTime DESC 
         )    
+0

這工作。很簡單,不知道我怎麼沒弄清楚。謝謝。 –

1
UPDATE t 
SET LastTestTime = t2.TestTime 
FROM 
    Test t JOIN 
    Test t2 
     ON t2.[Key] = t.[Key] 
     AND t2.TestTime = (
      SELECT MAX(t3.TestTime) 
      FROM Test t3 
      WHERE 
       t3.TestTime < t.TestTime 
       AND t3.[Key] = t.[Key] 
     ) 
+0

這不回答這個問題。它爲所有記錄分配相同的NewestTestTime。 –

+0

@GordonLinoff啊,謝謝...更新的答案應該解決這個問題。 –

0
UPDATE test 
SET lastTestTime = 
    (SELECT TOP(1) testTime 
    FROM test tt 
    WHERE test.key = tt.key 
    ORDER BY testTime DESC)