From: | Richard Huxton <dev(at)archonet(dot)com> |
---|---|
To: | Bob Singleton <bsingleton(at)ibss(dot)net> |
Cc: | pgsql-sql(at)postgresql(dot)org |
Subject: | Re: Iterate and write a previous row to a temp table? |
Date: | 2007-07-03 18:57:20 |
Message-ID: | 468A9C10.8070005@archonet.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-sql |
Bob Singleton wrote:
> 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.
Can't be done, because you don't have a primary key, so no way to
distinguish between duplicate rows. However, if you just eliminate
duplicates you could just use a function like (not tested):
CREATE FUNCTION ranged(
startTime timestamp with time zone,
endTime timestamp with time zone,
) RETURNS SETOF statusLog
AS $$
SELECT entityid,statusid,timestamp
FROM statusLog
WHERE timestamp BETWEEN startTime AND endTime
UNION
SELECT entityid,statusid,timestamp
FROM statusLog
WHERE timestamp <= startTime ORDER BY timestamp DESC LIMIT 1
ORDER BY <final result ordering>
$$ LANGUAGE SQL;
Note that UNION eliminates duplicates, if you want to keep them use
"UNION ALL"
HTH
--
Richard Huxton
Archonet Ltd
From | Date | Subject | |
---|---|---|---|
Next Message | Adam Tauno Williams | 2007-07-03 23:35:43 | Re: Informix Schema -> PostgreSQL ? |
Previous Message | chester c young | 2007-07-03 18:49:34 | Re: Iterate and write a previous row to a temp table? |