使用MAX进行SQL更新查询

时间:2013-03-06 20:58:51

标签: sql sql-server sql-update

我在这里看不到任何与我真正相同的东西,虽然可能只是我没有在这么长时间内完成sql。

所以我有一个主表TestTempGeneralInfo和一个dail TestTaskGeneralInfo。我可以使用这个查询:

SELECT testtempgeneralinfo.issueid, 
       Max(testtaskgeneralinfo.effectivetime) 
FROM   testtaskgeneralinfo 
       INNER JOIN testtempgeneralinfo 
               ON testtaskgeneralinfo.testtemplateid = 
                  testtempgeneralinfo.issueid 
WHERE  testtempgeneralinfo.projectid = 150 
GROUP  BY testtempgeneralinfo.issueid 

查看TestTaskGeneralInfo表的MAX有效时间。

但我正在努力编写一个查询来更新同一列TestTempGeneralInfo。有人可以帮忙吗?希望这不是一个愚蠢的问题。感谢

2 个答案:

答案 0 :(得分:0)

有几种不同的方法可以做到这一点,但最简单的方法可能就是将上面的查询转换为公共表表达式,然后将更新语句连接到CTE:

    ;WITH MaxDate AS
    ( SELECT testtemplateid, Max(effectivetime) as MaxEffectiveTime
      FROM testtaskgeneralinfo
      GROUP BY testtemplateid)
    UPDATE testtempgeneralinfo 
    SET effectivetime = MaxEffectiveTime
    FROM   MaxDate 
    INNER JOIN testtempgeneralinfo 
           ON MaxDate.testtemplateid = testtempgeneralinfo.issueid 
    WHERE  testtempgeneralinfo.projectid = 150 
编辑:抱歉,那里有一点复制/粘贴错误。但上面假设您希望使用最新的testtaskgeneralinfo的有效时间更新testtempgeneralinfo的有效时间。

答案 1 :(得分:0)

我不确定我理解你的问题。我理解为:

“鉴于上述查询,如何使用新值更新包含最大有效时间的行?”

假设issueid是你的主键,答案是这样的:

update testtempgeneralinfo
set
  effectivetime = getdate()  --columns and values will vary...
where issueid = (
  SELECT top 1 testtempgeneralinfo.issueid
  FROM
    testtaskgeneralinfo 
    INNER JOIN
    testtempgeneralinfo 
    ON testtaskgeneralinfo.testtemplateid = testtempgeneralinfo.issueid 
    WHERE testtempgeneralinfo.projectid = 150 
    order by
      testtaskgeneralinfo.effectivetime desc
  );