Как обновить строку с самой последней отметкой времени - PullRequest
0 голосов
/ 25 августа 2011

Допустим, у меня есть строка с полями a,b,c, d & time_stamp, где a - уникальный ключ, а d - «удаленная» строка (которую я на самом деле не удаляю, так как хочу сохранить ее для контрольный журнал).

Если я изменю строку, я не буду просто ОБНОВЛЯТЬ, потому что я хочу сохранить этот контрольный журнал. Вместо этого я отмечу наиболее полученную строку как удаленную, а затем вставлю новую строку (надеюсь, я четко это описал).

Теперь (как) я могу с помощью одной SQL-операции ОБНОВИТЬ самую последнюю строку (по методу времени), где a =?

Может быть, что-то вроде

UPDATE <table>  
  SET d="Y"
  WHERE a=<some value> AND time_stamp=MAX(time_stamp)

это правильно? Можно ли сделать это лучше? Спасибо за любую помощь

Ответы [ 2 ]

1 голос
/ 25 августа 2011

Попробуйте это:

UPDATE TestTable
SET D= Y
FROM (
      SELECT MAX(Time_Stamp) as MaxTimeStamp
      FROM TestTable
      WHERE A=x
     ) t
WHERE t.Time_Stamp = TestTable.MaxTimeStamp

Просто убедитесь, что ваши временные метки достаточно точны для уровня активности в таблице, чтобы не было 2 строк с одинаковыми значениями A и time_stamp.Если у вас> 1 строка с одинаковой отметкой времени и значением A, вы можете обновить больше, чем просто самую последнюю строку.

1 голос
/ 25 августа 2011

try

UPDATE MyTable T
SET T.d="Y"
WHERE T.a=<some value> AND 
T.time_stamp=(SELECT MAX(T2.time_stamp) FROM MyTable T2 WHERE T2.a = T.a)

IF a уникален и / или PK, тогда это можно сделать проще / лучше:

UPDATE MyTable T
SET T.d="Y"
WHERE T.a=<some value>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...