根据表中的2个值更新sql记录

时间:2012-01-23 13:54:39

标签: sql sql-update max

我有一个包含以下列的表:

GRVLID
GRID
Timein
Timeout

此表是访客跟踪系统的一部分。

还有另一个表格可以保存每位访问者的信息。 表会跟踪访问者每次登录和退出的时间。

GRVLID是唯一的记录标识符。 GRID是访客标识号。每位访问者都有自己的GRID号码。 Timein是访问者登录的日期时间。Timeout是访问者退出时的日期时间。

每次访问者登录时,都会创建一条新记录。因此,可以使多个记录具有相同的GRID个数字。 GRVLID号码是唯一的,只是在添加新记录时递增。

我需要的是update-set-where语句,用于更新给定GRVLID个数字GRID个最高的记录。我试过了:

update database
set [TimeOut] = @p_timeOut
where (GRID = @p_GRID and MAX(GRVLID))

但这似乎与MSSQL不太匹配。有什么想法吗?

2 个答案:

答案 0 :(得分:1)

我认为你所寻找的更像是这样:

update database
set [TimeOut] = @p_timeOut
where GRID = @p_GRID 
and GRVLID = (select MAX(GRVLID) from database WHERE where GRID = @p_GRID)

有更有效的方法可以重新编写此查询,但如果性能不是一个问题,那么这将很好地工作,并且很容易理解。

P.S。我希望你的表名不是“数据库”。

答案 1 :(得分:0)

可能是这样的:

update database
set [TimeOut] = @p_timeOut
from database
where GRVLID in
(select max(GRVLID) from database group by GRID)

使用select max(GRVLID) from database group by GRID为每个GRVLID选择GRID的最大值。

后记,您update选择了GRVLID的行。