我有一个包含以下列的表:
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
不太匹配。有什么想法吗?
答案 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
的行。