假设我的字段为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)
是正确的吗?可以做得更好吗?谢谢你的帮助
答案 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值,那么您可以更新的不仅仅是最近的行。