私はSQLにかなり慣れていないので、この問題を約2日間解決しようとしましたが、役に立ちませんでした。
問題は、可能であればカーソルを使用せずに、Table_2 の特定の行のサブセットのみを考慮して、Table_2 の値から Table_1 の値を更新するにはどうすればよいかということです。
具体的には、次の 2 つのテーブルがあります。
CREATE TABLE [dbo].[Table_1](
[ID] [int] NOT NULL,
[LastAmount] [int] NOT NULL,
[LastDate] [datetime] NOT NULL
) ON [PRIMARY];
CREATE TABLE [dbo].[Table_2](
[ID] [int] NOT NULL,
[Amount] [int] NOT NULL,
[Date_] [datetime] NOT NULL
) ON [PRIMARY];
表には次の値があります。
INSERT INTO [dbo].[Table_1]
VALUES (1, 0, CONVERT(DATETIME, '19000101', 112)),
(2, 0, CONVERT(DATETIME, '19000101', 112));
INSERT INTO [dbo].[Table_2]
VALUES (1, 10, CONVERT(DATETIME, '19750101', 112)),
(1, 20, CONVERT(DATETIME, '19500101', 112)),
(1, 15, CONVERT(DATETIME, '20000101', 112)),
(2, 30, CONVERT(DATETIME, '20100101', 112));
ポイントは、ID が Table_2 と一致する Table_1 の値を更新することです。Table_1.LastAmount は、最新の Table_2.Date_ で Table_2.Amount を取得する必要があります。同様に、Table_1.LastDate の場合、日付がその特定の ID の最新のものである Table_2.Date_ を取得する必要があります。
したがって、更新前の Table_1:
ID |LastAmount |LastDate
----|-----------|--------
1 |0 |1900-01-01 00:00:00.0000
2 |0 |1900-01-01 00:00:00.0000
表 2:
ID |Amount |Date
----|-----------|--------
1 |10 |1975-01-01 00:00:00.0000
1 |20 |1950-01-01 00:00:00.0000
1 |15 |2000-01-01 00:00:00.0000
2 |30 |2010-01-01 00:00:00.0000
更新後の Table_1:
ID |LastAmount |LastDate
----|-----------|--------
1 |15 |2000-01-01 00:00:00.0000
2 |30 |2010-01-01 00:00:00.0000
INNER JOIN を使用してあらゆる種類の UPDATE を試したり、値を割り当てるときにインライン SELECT を使用したりしましたが、どれも機能しませんでした。よろしくお願いします。