Re: Iterate and write a previous row to a temp table?

From: Bob Singleton <bsingleton(at)ibss(dot)net>
To: sql pgsql <pgsql-sql(at)postgresql(dot)org>
Subject: Re: Iterate and write a previous row to a temp table?
Date: 2007-07-06 16:25:51
Message-ID: 468E6D0F.5070701@ibss.net
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-sql

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta content="text/html;charset=ISO-8859-1" http-equiv="Content-Type">
</head>
<body bgcolor="#ffffff" text="#000000">
chester c young wrote:
<blockquote cite="mid25291(dot)42349(dot)qm(at)web54305(dot)mail(dot)re2(dot)yahoo(dot)com"
type="cite">
<pre wrap="">--- Bob Singleton <a class="moz-txt-link-rfc2396E" href="mailto:bsingleton(at)ibss(dot)net">&lt;bsingleton(at)ibss(dot)net&gt;</a> wrote:

</pre>
<blockquote type="cite">
<pre wrap="">Revisiting a Time In Status query I received help on - I'm trying to
narrow down a subset of data I return for analysis.

Given a statusLog as entityId, statusId, timestamp that might look
something like

entityId | statusId | timestamp
--------------------------------------------
001 | HLD | 2007-06-14 11:07:35.93
001 | RDY | 2007-06-15 11:07:35.93
001 | USE | 2007-06-16 11:07:35.93
001 | RDY | 2007-06-17 11:07:35.93
001 | MNT | 2007-06-18 11:07:35.93

I need to pull for a given span of time - say 2007-06-16 00:00:00.01
(let me call it startTime) to 2007-06-17 23:59:59.99 (call it
endTime)
in such a way that rows with a timestamp between startTime and
endTime
AND the latest record prior to or equal to startTime are returned. In

the above simplified example, only the second and third rows would be

returned.

A colleague suggested a temp table, but I'm unsure how to iterate
until
I pass the startTime and then write the _previous_ and all subsequent

rows to a temp table, stopping when I pass the endTime parameter.

Any hints?

Thanks!
Bob Singleton

</pre>
</blockquote>
<pre wrap=""><!---->
couldn't you use the simple query:

select * from sometable
where timestamp between
(select max(timestamp) from sometable where timestamp &lt;= minTime)
and maxTime

</pre>
</blockquote>
This works very well unless I have no records where timestamp &lt;=
minTime. If I try&nbsp; <br>
&nbsp;&nbsp;&nbsp; select max(timestamp) from sometable where timestamp &lt;= minTime;<br>
I get<br>
&nbsp;max<br>
-----<br>
<br>
(1 row)<br>
And the blank row/line/value/? confuses the between call - I get 0 rows
returned.<br>
&nbsp;<br>
(if minTime is later than at least one row's timestamp I will see
something like)<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; max<br>
------------------------<br>
&nbsp;2007-06-08 17:42:00.18<br>
(1 row)<br>
<br>
<br>
Any help greatly appreciated!<br>
bs<br>
</body>
</html>

Attachment Content-Type Size
unknown_filename text/html 2.4 KB

In response to

Browse pgsql-sql by date

  From Date Subject
Next Message Gary Stainburn 2007-07-06 16:35:39 Re: select from table and add rows.
Previous Message Andrew Sullivan 2007-07-06 15:02:57 Re: select from table and add rows.