0

我在这里看不到任何对我来说真正相同的东西,尽管可能只是我很久没有做 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。任何人都可以帮忙吗?希望这不是一个愚蠢的问题。谢谢

4

2 回答 2

1

有几种不同的方法可以做到这一点,但对您来说最简单的方法可能是只获取上面的查询并将其转换为公共表表达式,然后将更新语句加入 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 的有效时间。

于 2013-03-06T21:09:46.107 回答
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
  );
于 2013-03-06T21:11:03.190 回答