2012-05-10 6 views
3

私はSQLには悪くないが、これを理解するのは苦労している。SQL Update Query

私はテーブルがkeyTestTimeLastTestTimeと呼ばれる2つのdatetimeの列と呼ばれる文字列で、testと呼ばれています。

私は、すべての行を更新し、keyの場合、LastTestTimeの値を最新の前のTestTimeに設定するクエリを作成しようとしています。ここで

は、私は、これが判明する方法の例です。これらの

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)