Sql 更新列中的时间戳值,使最新的时间戳为当前时间,同时保持行之间的相对时间差

Sql 更新列中的时间戳值,使最新的时间戳为当前时间,同时保持行之间的相对时间差,sql,postgresql,Sql,Postgresql,我在Postgres数据库中有一个表,其中有一列的值是过去一段时间内的时间戳。如何更新该列中的值,使最近的时间戳的最大值为当前时间戳,并保持其他时间戳之间的间隔相同?例如,如果当前值为: 2019-05-23 10:00:00 2019-05-23 10:30:00 2019-05-23 11:45:00 我在2020-07-16 14:45:00运行查询,然后我希望值更新为: 2020-07-16 13:00:00 2020-07-16 13:30:00 2020-07-16 14:45:0

我在Postgres数据库中有一个表,其中有一列的值是过去一段时间内的时间戳。如何更新该列中的值,使最近的时间戳的最大值为当前时间戳,并保持其他时间戳之间的间隔相同?例如,如果当前值为:

2019-05-23 10:00:00
2019-05-23 10:30:00
2019-05-23 11:45:00
我在2020-07-16 14:45:00运行查询,然后我希望值更新为:

2020-07-16 13:00:00
2020-07-16 13:30:00
2020-07-16 14:45:00

您需要一些时间戳算法:

select t.*,
       ( ts + (current_timestamp - max(ts) over ()) ) as new_ts
from t;
他是一把小提琴

编辑:

要更新,您可以使用:

update t
    set ts =  ( ts + (current_timestamp -  max_ts) )
    from (select max(ts) as max_ts from t) tt;

为了在不手动输入当前时间戳的情况下就地更新时间戳,可以使用以下查询:

使现代化 样本度量数据 设置 时间戳=sub.new\u ts 从…起 选择 时间戳, 现在-maxtimestamp超过+时间戳 新的 从…起 样本度量数据 附属的 哪里 sample_metrics_data.timestamp=sub.timestamp;
需要子查询或CTE,因为更新不允许使用窗口功能。

感谢您的回复。我希望在不手动输入当前时间戳的情况下就地更新时间戳。事实上,我已经弄明白了这一点,我将把它作为一个答案添加进来,以供将来参考。