繁体   English   中英

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

[英]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 GRIDGRVLID为每个GRID选择GRVLID的最大值。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM