我对SQL相当陌生,现在尝试解决这个问题大约两天,但无济于事。
问题是,如何从 Table_2 中的值更新表 Table_1 中的值,只考虑 Table_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.Amount 与最近的 Table_2.Date_。同样对于 Table_1.LastDate 它应该得到 Table_2.Date_ 其中日期是该特定 ID 的最新日期。
因此,更新前的 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
更新后的表_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,但它们都不起作用。提前谢谢了。