2012-01-23 54 views
1

我有了如下的表:更新SQL记录基于2个值表

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打好。有任何想法吗?

回答

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.我希望你的表真的不被命名为“数据库”。

+0

太棒了。这正是我所期待的。谢谢。不,我的表格确实没有被命名为“数据库”。 – CurtisHx

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的最大值。

Afterwords,you update选择了GRVLID的行。