From: | "Adam Rich" <adam(dot)r(at)sbcglobal(dot)net> |
---|---|
To: | "'Enrico Sirola'" <enrico(dot)sirola(at)gmail(dot)com>, "'Willem Buitendyk'" <willem(at)pcfish(dot)ca> |
Cc: | <pgsql-general(at)postgresql(dot)org> |
Subject: | Re: Oracle Analytical Functions |
Date: | 2008-01-31 15:13:57 |
Message-ID: | 00ff01c8641b$e70777a0$b51666e0$@r@sbcglobal.net |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-general |
> > I'm trying to replicate the use of Oracle's 'lag' and 'over
> > partition by' analytical functions in my query. I have a table
> > (all_client_times) such as:
> > and I would like to create a new view that takes the first table and
> > calculates the time difference in minutes between each row so that
> > the result is something like:
I thought of a another way of doing this. In my tests, it's a little
faster, too.
DROP SEQUENCE if exists seq1;
DROP SEQUENCE if exists seq2;
CREATE TEMPORARY SEQUENCE seq1 CACHE 1000;
CREATE TEMPORARY SEQUENCE seq2 CACHE 1000;
select a.client_id, b.datetime, a.datetime as previousTime, (b.datetime -
a.datetime) as difftime from
(select nextval('seq1') as s, client_id, datetime from all_client_times
order by client_id, datetime OFFSET 0) as a
inner join
(select nextval('seq2') as s, client_id, datetime from all_client_times
order by client_id, datetime OFFSET 0) as b
on a.s=(b.s-1) where a.client_id=b.client_id
From | Date | Subject | |
---|---|---|---|
Next Message | Erik Jones | 2008-01-31 15:14:12 | Re: postgresql book - practical or something newer? |
Previous Message | Joshua D. Drake | 2008-01-31 15:12:24 | Re: [GENERAL] PostgreSQL Certification |