使用同一 ID 上另一个 table 的最新值更新 Table1 列
Update Table1 Column with newest value from another table on same id
我需要用表 2 中的最新列值更新表 1 的值 'product',两者具有相同的 ID。 yyyymm - 列表示最新值。
TEMP_01_HALF
id04 | product | col1 | col2
-------------------------------------
10 | null | data1 | data2
10 | null | datax | datay
20 | null | data | data
21 | null | data3 | data4
TEMP_02_FULL
id04 | item | col1 | yyyymm
-------------------------------------
10 | duck | data1 | 201502
10 | bear | datax | 201401
20 | prod1 | data | 201501
21 | prod2 | data3 | 201402
已更新TEMP_01_HALF:
id04 | product | col1 | col2
-------------------------------------
10 | bear | data1 | data2
10 | bear | datax | datay
20 | prod1 | data | data
21 | prod2 | data3 | data4
我尝试了几个查询
没有得到这个工作:
UPDATE a
SET a.product = b.item
from TEMP_01_HALF a join
(SELECT id04, item, MAX(yyyymm)
FROM TEMP_02_FULL
GROUP BY id04, item) b on a.id04 = b.id04
这个没有更新最高 'yyyymm' -值
UPDATE TEMP_01_HALF
SET TEMP_01_HALF.product = TEMP_02_FULL.item
FROM TEMP_01_HALF
JOIN TEMP_02_FULL
ON TEMP_01_HALF.id04 = TEMP_02_FULL.id04
JOIN ( select id04
, max(yyyymm) yyyymm
from TEMP_02_FULL
group by id04
)
TEMP_02_FULL_MAX
on TEMP_02_FULL.id04 = TEMP_02_FULL_MAX.id04
尝试一下;
update a
set product = x.item
from TEMP_01_HALF a
join (
select a.id04, a.item
from TEMP_02_FULL a
join (
select id04, max(yyyymm) max_val
from TEMP_02_FULL
group by id04
) b
on a.id04 = b.id04
and a.yyyymm = b.max_val
) x
on a.id04 = x.id04
这是 JOIN 到一秒钟的单行的方法 table,假设 id04
是一个唯一的列:
UPDATE a
SET a.product = b.item
from TEMP_01_HALF a
JOIN TEMP_02_FULL b
ON b.id04 = (
SELECT TOP 1 b1.id04
FROM TEMP_02_FULL b1
WHERE b1.id04=a.id04
ORDER BY yyyymm DESC
)
您可以使用相关子查询:
UPDATE TEMP_01_HALF
SET product = (SELECT TOP 1 item
FROM TEMP_02_FULL AS b
WHERE a.id04 = b.id04
ORDER BY yyyymm DESC)
FROM TEMP_01_HALF AS a
我需要用表 2 中的最新列值更新表 1 的值 'product',两者具有相同的 ID。 yyyymm - 列表示最新值。
TEMP_01_HALF
id04 | product | col1 | col2
-------------------------------------
10 | null | data1 | data2
10 | null | datax | datay
20 | null | data | data
21 | null | data3 | data4
TEMP_02_FULL
id04 | item | col1 | yyyymm
-------------------------------------
10 | duck | data1 | 201502
10 | bear | datax | 201401
20 | prod1 | data | 201501
21 | prod2 | data3 | 201402
已更新TEMP_01_HALF:
id04 | product | col1 | col2
-------------------------------------
10 | bear | data1 | data2
10 | bear | datax | datay
20 | prod1 | data | data
21 | prod2 | data3 | data4
我尝试了几个查询
没有得到这个工作:
UPDATE a
SET a.product = b.item
from TEMP_01_HALF a join
(SELECT id04, item, MAX(yyyymm)
FROM TEMP_02_FULL
GROUP BY id04, item) b on a.id04 = b.id04
这个没有更新最高 'yyyymm' -值
UPDATE TEMP_01_HALF
SET TEMP_01_HALF.product = TEMP_02_FULL.item
FROM TEMP_01_HALF
JOIN TEMP_02_FULL
ON TEMP_01_HALF.id04 = TEMP_02_FULL.id04
JOIN ( select id04
, max(yyyymm) yyyymm
from TEMP_02_FULL
group by id04
)
TEMP_02_FULL_MAX
on TEMP_02_FULL.id04 = TEMP_02_FULL_MAX.id04
尝试一下;
update a
set product = x.item
from TEMP_01_HALF a
join (
select a.id04, a.item
from TEMP_02_FULL a
join (
select id04, max(yyyymm) max_val
from TEMP_02_FULL
group by id04
) b
on a.id04 = b.id04
and a.yyyymm = b.max_val
) x
on a.id04 = x.id04
这是 JOIN 到一秒钟的单行的方法 table,假设 id04
是一个唯一的列:
UPDATE a
SET a.product = b.item
from TEMP_01_HALF a
JOIN TEMP_02_FULL b
ON b.id04 = (
SELECT TOP 1 b1.id04
FROM TEMP_02_FULL b1
WHERE b1.id04=a.id04
ORDER BY yyyymm DESC
)
您可以使用相关子查询:
UPDATE TEMP_01_HALF
SET product = (SELECT TOP 1 item
FROM TEMP_02_FULL AS b
WHERE a.id04 = b.id04
ORDER BY yyyymm DESC)
FROM TEMP_01_HALF AS a