Обновление записи SQL на основе 2 значений в таблице - PullRequest
1 голос
/ 23 января 2012

У меня есть таблица со следующими столбцами:

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.Есть идеи?

Ответы [ 2 ]

1 голос
/ 23 января 2012

Я думаю, что вы ищете, больше похоже на это:

update database
set [TimeOut] = @p_timeOut
where GRID = @p_GRID 
and GRVLID = (select MAX(GRVLID) from database WHERE where GRID = @p_GRID)

Есть более эффективные способы переписать этот запрос, но если производительность не имеет значения, то это будет работать нормальнои это легко понять.

PS Я надеюсь, что ваша таблица действительно не называется "база данных".

0 голосов
/ 23 января 2012

Возможно так:

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, вы update строки, которые выбрали GRVLID.

...