2012-01-23 6 views
1

で2つの値に基づいて、SQLのレコードを更新する私は、次の列を持つテーブルを持っている:テーブル

GRVLID 
GRID 
Timein 
Timeout 

このテーブルには、訪問者追跡システムの一部です。

各訪問者の情報を保持する別のテーブルがあります。 このテーブルは、訪問者がログインするたびにログを記録します。

GRVLIDは一意のレコード識別子です。 GRIDは訪問者の識別番号です。各訪問者は自分のGRID番号を持っています。 Timeinは、訪問者がログインした日時です。Timeoutは、訪問者がログアウトした日時です。

訪問者がログインするたびに、新しいレコードが作成されます。したがって、同じGRID番号を持つ複数のレコードを持つことは可能です。 GRVLIDの番号は一意であり、新しいレコードが追加されると増分します。

私が必要とするのは、GRVLIDの数字がGRIDの番号のレコードを更新するupdate-set-whereステートメントです。私がやってみました:

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.私はあなたのテーブルが本当に "データベース"という名前ではないことを願っています。 select max(GRVLID) from database group by GRID

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

あなたは、各GRIDについてGRVLIDの最大値を選択します。おそらく、このような

+0

素晴らしい。それはまさに私が探していたものです。ありがとう。そして、いいえ、私のテーブルは本当に "データベース"という名前ではありません。 – CurtisHx

0

updateの後に、GRVLIDが選択されている行があります。

関連する問題