如何使用最新时间戳更新行

时间:2011-08-25 02:47:52

标签: mysql sql odbc

假设我的字段为a,b,c, d & time_stamp,其中a是唯一键,而d代表“已删除”行(我实际上并未将其删除,因为我我想把它留作审计线索。)

如果我修改了行,我不会只是更新,因为我想保留审计跟踪。相反,我会将最重要的行标记为已删除,然后插入一个新行(我希望我已经清楚地描述了这一行)。

现在,(如何)我可以用一个SQL staement UPDATE最新的行(by time_stamp),其中a =?

也许像

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

是正确的吗?可以做得更好吗?谢谢你的帮助

2 个答案:

答案 0 :(得分:1)

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)

如果a是唯一的和/或PK,则可以更容易/更好地完成:

UPDATE MyTable T
SET T.d="Y"
WHERE T.a=<some value>

答案 1 :(得分:1)

试试这个:

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值的活动级别。如果你有&gt; 1行具有相同的时间戳和A值,那么您可以更新的不仅仅是最近的行。