我在这里看不到任何与我真正相同的东西,虽然可能只是我没有在这么长时间内完成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。有人可以帮忙吗?希望这不是一个愚蠢的问题。感谢
答案 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
);