我有一张这样的桌子,
event_id | date
----------+------------------------
1703702 | 2013-06-25 07:50:57-04
3197588 | 2013-06-25 07:51:57-04
60894420 | 2013-06-25 07:52:57-04
60894420 | 2013-06-25 07:53:57-04
183503 | 2013-06-25 07:54:57-04
63116743 | 2013-06-25 07:55:57-04
63110451 | 2013-06-25 07:56:57-04
63116743 | 2013-06-25 07:57:57-04
63116743 | 2013-06-25 07:58:57-04
Run Code Online (Sandbox Code Playgroud)
我想应用滞后函数,但也是一个组,所以我可以找到任何特定event_id之间的时间间隔.
我想要这样的事情:
SELECT event_id, difference
FROM (
SELECT event_id, date - lag(date) over (order by date) as
difference FROM table GROUP BY event_id
) t;
Run Code Online (Sandbox Code Playgroud)
但是我不能将GROUP BY与LAG功能一起使用.我想要一个类似于以下的结果:
63116743, {120, 60}
60894420, {60}
...
...
Run Code Online (Sandbox Code Playgroud)
因此,第一个id的事件之间有一个120s和60s的窗口,第二个id的60s窗口.
有没有办法做到这一点?输出格式不是太重要,只要我最终可以将它放入数组中.我正在使用Postgres 9.1
我AFTER UPDATE在表上有一个延迟触发器,设置为在某个列更新时触发.这是我用作计数器的整数类型.
我不是100%肯定,但看起来如果我在事务期间将该特定列增加100次,则触发器在事务结束时排队并执行100次.
我希望触发器每行只安排一次,无论我增加了多少次该列.
我能以某种方式这样做吗?或者,如果触发的触发器必须排队,无论它们是否重复,我是否可以在首次运行触发器时清除此队列?
Postgres的版本是9.1.这是我得到的:
CREATE CONSTRAINT TRIGGER counter_change
AFTER UPDATE OF "Counter" ON "table"
DEFERRABLE INITIALLY DEFERRED
FOR EACH ROW
EXECUTE PROCEDURE counter_change();
CREATE OR REPLACE FUNCTION counter_change()
RETURNS trigger
LANGUAGE plpgsql
AS $$
DECLARE
BEGIN
PERFORM some_expensive_procedure(NEW."id");
RETURN NEW;
END;$$;
Run Code Online (Sandbox Code Playgroud)