2012-05-10 2 views
3

나는 SQL에 나쁘지는 않지만이 문제를 해결하는 데 어려움을 겪고 있습니다.SQL Update Query

나는 테이블이 keyTestTimeLastTestTime라는 두 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)