如何在PSQL中执行时间轴上的迭代更新?

时间:2016-03-17 13:37:43

标签: sql postgresql sql-update

我有一张带时间表的临时表。数据从多个表中收集(时间轴操作a,时间轴操作b等):

             time
-------------------------------
 2015-02-05 10:45:54.13197+01
 2015-02-05 10:45:56.422353+01
 2015-02-05 10:45:57.518791+01
 2015-02-05 10:46:02.03023+01
 2015-02-05 10:46:02.0821+01
 2015-02-05 10:46:11.584209+01
 2015-02-05 10:46:11.627014+01
 2015-02-05 10:46:11.653886+01
 2015-02-05 10:46:11.688192+01
 2015-02-05 10:48:01.465656+01
 2015-02-05 10:48:02.337642+01
 2015-02-05 12:05:08.088097+01
 2015-02-05 12:05:08.922485+01
 2015-02-05 12:45:49.313329+01
 2015-02-05 12:45:49.363351+01
 2015-02-05 12:45:49.382804+01
 2015-02-05 12:45:49.40134+01
 2015-02-05 12:45:49.416624+01
 2015-02-05 12:45:49.434+01
 2015-03-16 14:21:31.215+01
 2015-03-16 14:22:12.039+01
 2015-03-16 14:22:43.088+01
 2015-03-16 14:58:00.032+01
 2015-06-02 12:53:20.97+02

需要修改数据,以使每个操作在上一个操作后至少2分钟发生。 IE浏览器。两次连续动作之间的最小差异至少为2分钟。

在C,C ++,Java或任何过程语言中,我只是迭代排序的数组并根据先前的值(如果需要)增加值。

如何在SQL或PSQL中执行此操作?

2 个答案:

答案 0 :(得分:0)

你有几个选择

  1. 您可以使用pg_sleep(秒)例如SELECT pg_sleep(120);参考postgresql 9.5 pg_sleep

  2. PgAgent Ref PgAgent

  3. 一个shell脚本(这可能会对您有所帮助)stackoverflow question 31382504

  4. 您可以设置一个cron作业Ref How to create a Cron job

  5. plsql Ref postgresql 9.5 pgSQL control structures

    中的控制结构

    一切顺利

答案 1 :(得分:0)

您应该查看least()greatest()。您可能想要执行以下操作:

UPDATE some_table SET some_time=greatest(some_time,(SELECT previous_time FROM ... ORDER BY previous_time DESC LIMIT 1)+'2 minute'::interval);