SQL从一个表中选择最新值Id

时间:2015-07-12 20:49:27

标签: sql

所以我们有一个应用程序可以为跑步者存储单圈时间,表格有点像这样。

亚军

ID|AGE|LastLap|BestLap

Laps

ID|Time|Date|Inserted|RunnerID

因此,应用程序有/有一个错误,当你从上一圈添加一个过去的圈时,它仍然设置最后一圈ID ,当它不需要时。< / p>

我想要做的是修复lastlap列,以便每个跑步者的真实最后一圈ID是最后一圈ID,通过为每个跑步者按日期排序圈数表但我无法弄清楚用于执行此操作的SQL更新脚本。我非常接近,但是我无法从圈数表中获得ID,或者我得到的结果不止一个。

1 个答案:

答案 0 :(得分:0)

我跟随迈克的声明:如果它不是一些疯狂的性能调整的东西,那么坚持观察像#&#34;最后......&#34; &#34;最好......&#34;,它可以最大限度地减少这方面的麻烦。

无论如何,如果你&#34;只是&#34;需要更新已破坏的内容,以下内容应与MS SQL一起使用,如果性能不是很好的话。 假设:&#34;时间&#34;是你的商业价值,而不是一天中的时间; &#34;插入&#34;和&#34; ID&#34;无法使用,因为有人可能会插入未按日期排序的数据。

这意味着:如果每天每个跑步者有一个以上的圈数,您只需假设最大的ID具有您想要的业务价值或更改您的数据模型。

DECLARE @RunnerID INT;
SET @RunnerID = yourRunnerID;

UPDATE RUNNERS
SET LastLap = (SELECT MAX(L.ID)
                FROM Laps L 
                WHERE L.RunnerID = @RunnerID 
                AND L.DATE = (SELECT MAX(Date) 
                                FROM Laps 
                                WHERE Laps.RunnerID = @RunnerID
                              )
               )
WHERE ID = @RunnerID;