Re: gaps/overlaps in a time table : current and previous row question

From: Filip Rembiałkowski <plk(dot)zuber(at)gmail(dot)com>
To: thomas veymont <thomas(dot)veymont(at)gmail(dot)com>
Cc: pgsql-general(at)postgresql(dot)org
Subject: Re: gaps/overlaps in a time table : current and previous row question
Date: 2011-10-05 14:23:17
Message-ID: CAP_rwwnGrwmtV28QaNkgaH1k5NV6wa7nHWQ62A6-PK7k7Pk4kg@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-general

2011/10/5 thomas veymont <thomas(dot)veymont(at)gmail(dot)com>

> hello,
>
> let's say that each rows in a table contains a start time and a end
> time ("timeinterval" type),
>

there is no such type ( no result for select * from pg_type where typname ~
'timeinterval' ).
can you show exact table structure (output of psql "\d" or better, CREATE
TABLE command)?

but the index are not ordered nor consecutive, e.g :
>
> $ select * from T order by starttime
>
> index | starttime | endtime
> ---------+-----------------+-----------------
> 3 | t1 | t2
> 1 | t3 | t4
> 18 | t5 | t6
> 12 | t7 | t8
>
> I want a result that shows time gaps and overlaps in this table, that is :
>
> delta
> ---------+
> t3 - t2 |
> t5 - t4 |
> t7 - t6 |
>
> how would I do that ? I guess this could be done with window function and
> lag()
> function but I don't know exactly how. Any suggestion ?
>
>

-- assuming that you actually want lag compared to previous starttime - try
this:
select index, starttime, endtime, starttime - lag(endtime) over(order by
starttime asc) as delta from test;

PS. this question should probably go to "pgslq-sql mailing list more than
"pgsql-general". also please give more details next time. Thanks.

In response to

Responses

Browse pgsql-general by date

  From Date Subject
Next Message Achilleas Mantzios 2011-10-05 14:30:10 Re: null values in a view
Previous Message Lauri Kajan 2011-10-05 14:22:21 null values in a view