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

Поиск
Список
Период
Сортировка
От Richard Huxton
Тема Re: Iterate and write a previous row to a temp table?
Дата
Msg-id 468A9C10.8070005@archonet.com
обсуждение исходный текст
Ответ на Iterate and write a previous row to a temp table?  (Bob Singleton <bsingleton@ibss.net>)
Список 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
startTimeAND 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


В списке pgsql-sql по дате отправления:

Предыдущее
От: chester c young
Дата:
Сообщение: Re: Iterate and write a previous row to a temp table?
Следующее
От: Adam Tauno Williams
Дата:
Сообщение: Re: Informix Schema -> PostgreSQL ?