У меня есть таблица, в которой у меня есть FK для других таблиц и временные метки для каждой записи в этой таблице. Например:
ID FK Timestamp
1 1 2015-05-05
2 1 2015-05-06
3 1 2015-05-07
4 2 2015-04-08
5 2 2015-04-09
6 2 2020-04-10 <- this timestamp should be set to timestamp of 5. row
7 2 2015-04-12
8 3 2015-05-06
Проблема в том, что некоторые из временных меток, которые я получил, содержат значения из будущего, которые должны быть возвращены к нормальной метке времени. Например, тот, что перед этим шагом, на том же FK.
У меня есть запрос, который выбирает все записи из будущего, а также получает их максимальные временные метки (до будущей):
select ws1.Id, ws1.Timestamp, ws1.workitem_id,
(select max(Timestamp) from WorkSteps where WorkSteps.WorkItem_Id = ws1.WorkItem_Id AND Timestamp<GETDATE() AND worksteps.Id<ws1.id)
from worksteps ws1
where ws1.Timestamp > GETDATE()
order by WorkItem_Id;
Как я могу превратить это в обновление?
Обновление
Хорошо, думаю, я понял:
update worksteps set Timestamp =
(select max(Timestamp) from WorkSteps ws1 where ws1.WorkItem_Id = worksteps.WorkItem_Id AND Timestamp<GETDATE() AND ws1.Id<worksteps.id)
where worksteps.Timestamp > GETDATE();