使用另一个表中的最新值更新表

时间:2015-06-03 10:00:45

标签: sql

所以我们遇到了一个问题,即整个表格是独一无二的" CRC"设置为" N / A"幸运的是我们有另一个表存储了多个版本的" CRC"如果我们使用它,我们应该能够撤回原来的" CRC" s

我的基本概念是

UPDATE Table1
SET Table1.CRC = History.CRC
FROM Table1 JOIN History ON Table1.PhoneNum = History.PhoneNum
where Table1.field2 = 'Uniquefield2 here'

问题在于我不知道CRC被拉了什么

我想根据列" calldatetime"拉出最新的History.crc。 并使用此值

更新Table1.CRC

上面的查询来源 Update table based on all values in another table as parameters

2 个答案:

答案 0 :(得分:2)

如果您有ID字段,则可以搜索最大ID,并仅返回ID最高的行,并在您希望的字段上分组。

我在这里使用了内联视图,以获得ID的最大PhoneNum个:

update Table1
SET    Table1.CRC = History.CRC
FROM   Table1
JOIN   History
ON     Table1.PhoneNum = History.PhoneNum
JOIN   ( select PhoneNum
         ,      max(id) id
         from   history
         group
         by     PhoneNum
       )
       History_MAX
on     History.ID = History_MAX.id
where  Table1.field2 = 'Uniquefield2 here'

答案 1 :(得分:1)

您可以通过添加calldatetime表中不存在以后History的记录的条件来修复您的查询:

UPDATE Table1
SET Table1.CRC = History.CRC
FROM Table1 JOIN History h ON Table1.PhoneNum = History.PhoneNum
WHERE Table1.field2 = 'Uniquefield2 here'
  AND NOT EXISTS (
    SELECT * FROM History hh
    WHERE hh.PhoneNum=h.PhoneNum AND hh.calldatetime > h.calldatetime
)

此查询从查询​​中向h表添加别名History,并要求calldatetime表达式内的协调子查询中不存在后来EXISTS的记录