1

別のテーブルの値によるテーブルの更新を含む同様の質問をいくつか見ました。

しかし、T2 が同じ援助で複数のレコードを保持し、ステータス = O を持つ T1 のレコードのみを更新する場合は?

T1
aid = 2345|Status = O
aid = 2120|Status = B


T2
aid = 2345|Status=B|Date=23/12/2002
aid = 2345|Status=F|Date=11/05/2002
aid = 2345|Status=G|Date=4/04/2002
aid = 2345|Status=R|Date=12/03/2002
aid = 2120|Status=G|Date=4/04/2012
aid = 2120|Status=R|Date=12/03/2005

例:

 UPDATE T1
    SET T1.Status = T2.Status
    Where T1.aid = (T2.aid of the record that holds newest date or max date)
    AND = T1.Status = 'O'
4

2 に答える 2

6

さて、SQL Server 2005+ の場合、次のことができます。

更新しました

;WITH CTE AS
(
    SELECT  *,
            RN = ROW_NUMBER() OVER(PARTITION BY aid ORDER BY [Date] DESC)
    FROM Table2
)
UPDATE T1
SET T1.Status = T2.Status
FROM Table1 T1
INNER JOIN CTE T2
    ON T1.aid = T2.aid
WHERE T2.RN = 1
AND T1.Status = 'O' -- for your "updated" question

そして別の方法は次のとおりです。

UPDATE  T1
SET     T1.Status = COALESCE(
          ( SELECT TOP (1) 
                     T2.Status
            FROM     T2
            WHERE    T2.aid = T1.aid
            ORDER BY [Date] DESC
          ), T1.Status)
FROM    T1
WHERE   T1.Status = 'O' ;
于 2013-04-03T19:55:23.453 に答える
2

通常、複数のテーブルから to を使用しJOINUPDATEから、それ自体で MAX および JOIN テーブル 2 を使用できます。

UPDATE a
SET a.Status = b.Status
FROM T1 a 
    JOIN T2 b ON a.aid = b.aid
    JOIN (
        SELECT aid, MAX(date) maxdate
        FROM T2
        GROUP BY aid
    ) c ON b.aid = c.aid AND b.date = c.maxdate
于 2013-04-03T19:55:19.040 に答える