[英]Updating sql record based on 2 values in table
我有一个包含以下各列的表:
GRVLID
GRID
Timein
Timeout
该表是访客跟踪系统的一部分。
还有另一个表保存每个访客的信息。 该表跟踪访问者每次登录和注销的时间。
GRVLID
是唯一记录标识符。 GRID
是访客标识号。 每个访客都有自己的GRID
号。 Timein
是日期时间时登录。游客Timeout
是日期时间当访问者退出。
每次访客登录时,都会创建一个新记录。 因此,可能会有多个具有相同GRID
号的记录。 GRVLID
号是唯一的,并且随着新记录的添加而递增。
我需要的是一条update-set-where语句,该语句针对给定的GRID
号更新具有最高GRVLID
号的记录。 我试着做:
update database
set [TimeOut] = @p_timeOut
where (GRID = @p_GRID and MAX(GRVLID))
但这似乎不适用于MSSQL
。 有任何想法吗?
我认为您正在寻找的更像是这样:
update database
set [TimeOut] = @p_timeOut
where GRID = @p_GRID
and GRVLID = (select MAX(GRVLID) from database WHERE where GRID = @p_GRID)
有更有效的方法来重写此查询,但是如果不考虑性能,那么它将很好用,而且很容易理解。
附言:我希望您的表未真正命名为“数据库”。
可能是这样的:
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
选择GRVLID
的最大值。
后记,您update
已选择GRVLID
的行。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.