gpt4 book ai didi

sql - 如何使用倒数第二个结果更新最后一条记录 [SQL Server]

转载 作者:行者123 更新时间:2023-12-02 10:23:52 27 4
gpt4 key购买 nike

我想用倒数第二行的通过/失败结果更新表的最后一个条目。如果表中只有一行,则查询不会失败。

这是我所拥有的代码,但仅更新第一个条目,而不更新倒数第二个条目。感谢帮助

UPDATE DB.dbo.Testergebnisse 
SET
Pass = (
SELECT TOP 1 Pass
FROM DB.dbo.Testergebnisse
WHERE
TestergebnisID != (
SELECT MAX(TestergebnisID) FROM DB.dbo.Testergebnisse
)
AND TestaufstellungID = 3166
ORDER BY TestergebnisID DESC
),
Fail = (
SELECT TOP 1 Fail
FROM DB.dbo.Testergebnisse
WHERE
TestergebnisID != (
SELECT MAX(TestergebnisID) FROM DB.dbo.Testergebnisse
)
AND TestaufstellungID = 3166
ORDER BY TestergebnisID DESC
)
WHERE
DB.dbo.Testergebnisse.TestergebnisID = (
SELECT TOP 1 TestergebnisID
FROM DB.dbo.Testergebnisse
WHERE TestaufstellungID = 3166
ORDER BY TestergebnisID DESC
)

SQL Server 版本:9.0.5057

最佳答案

我不确定我是否在关注。给定这样的数据:

TestergebnisID TestaufstellungID Pass        Fail
-------------- ----------------- ----------- -----------
1 1 10 12
2 1 5 6
3 1 3 4
4 2 0 0

您想要将 TestergebnisID = 3 的行更新为 TestergebnisID = 2 的记录中的“通过”和“失败”,就这样吗?或者记录 2 也应该使用记录 1 中的数据进行更新吗?

如果是前者,这应该可以解决问题:

;WITH rec AS
(
SELECT this.TestaufstellungID
-- most recent for the given test run
, MAX(this.TestergebnisID) AS LastTestergebnisID
-- find the previous
, PrevTestergebnisID =
(SELECT MAX(prev.TestergebnisID)
FROM Testergebnisse prev
WHERE prev.TestaufstellungID = this.TestaufstellungID
AND prev.TestergebnisID < MAX(this.TestergebnisID )
)
FROM Testergebnisse this
GROUP BY this.TestaufstellungID
)
UPDATE mostRecent
SET Pass = prev.Pass
, Fail = prev.Fail
FROM Testergebnisse mostRecent
JOIN rec
ON rec.LastTestergebnisID = mostRecent.TestergebnisID
JOIN Testergebnisse prev
ON prev.TestergebnisID = rec.PrevTestergebnisID

给予:

TestergebnisID TestaufstellungID Pass        Fail
-------------- ----------------- ----------- -----------
1 1 10 12
2 1 5 6
3 1 5 6 <-- 1 row affected
4 2 0 0

如果您希望所有这些都更新为其前任的值,那么:

;WITH rec AS
(
SELECT this.TestaufstellungID
-- most recent for the given test run
, this.TestergebnisID
-- find the previous
, PrevTestergebnisID =
(SELECT MAX(prev.TestergebnisID)
FROM Testergebnisse prev
WHERE prev.TestaufstellungID = this.TestaufstellungID
AND prev.TestergebnisID < this.TestergebnisID
)
FROM Testergebnisse this
)
UPDATE mostRecent
SET Pass = prev.Pass
, Fail = prev.Fail
FROM Testergebnisse mostRecent
JOIN rec
ON rec.TestergebnisID = mostRecent.TestergebnisID
JOIN Testergebnisse prev
ON prev.TestergebnisID = rec.PrevTestergebnisID

这将更新第 2 行(来自第 1 行)和第 3 行(来自第 2 行):

TestergebnisID TestaufstellungID Pass        Fail
-------------- ----------------- ----------- -----------
1 1 10 12
2 1 10 12 <--
3 1 5 6 <--
4 2 0 0

关于sql - 如何使用倒数第二个结果更新最后一条记录 [SQL Server],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55432223/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com