SQL Server:将一个表中的最大值插入到一个表中,其中键值相同

时间:2017-06-29 09:02:58

标签: sql-server tsql

我有一个情节控制表和一张气象表。它们都由GeographicalPlotID字段链接。

我想在每个情节的WeatherDataPulled字段中插入天气表中该地块的最新值。

我有这个查询,它不起作用 - 多部分标识符无法绑定。我试过内联,没有运气。

insert into 
ControlTable(WeatherDataPulled)
select
max(Time) 
from WeatherData
where (ControlTable.PlotID = WeatherData.PlotID
and ControlTable.PlotID is not null)

联接看起来像这样:

inner join
WeatherData
on 
ControlTable.PlotID = WeatherData.PlotID

知道我需要做些什么才能让它发挥作用?

3 个答案:

答案 0 :(得分:1)

我认为您可能需要更新声明而不是插入声明 试试这个:

UPDATE ControlTable
SET WeatherDataPulled = MAX([TIME])
FROM ControlTable
INNER JOIN WeatherData ON ControlTable.PlotID = WeatherData.PlotID

答案 1 :(得分:1)

请注意,Zorah建议的方法会导致错误,因为聚合可能不会出现在UPDATE语句的集合列表中。

见这里:Update statement containing aggregate not working in SQL server

您的更新声明(如下面的答案所示)包含一个工作正常的子查询,因此是您问题的正确答案。

答案 2 :(得分:0)

正如佐哈指出的那样,我愚蠢地使用插入而不是更新。

使用它:

update ControlTable set WeatherDataPulled= (select max(Time) from WeatherData where ControlTable.PlotID = WeatherData.PlotID)