Обсуждение: Filtering data based on timestamp

Поиск
Список
Период
Сортировка

Filtering data based on timestamp

От
Panos Kassianidis
Дата:
Hello everybody,

I am building a data logging application and I am facing the following
problem. I have a table which holds timestamp-value pairs for a recorded
variable. I would like to be able to select a range of values between 
a starting
and an ending timestamp but also specify an interval over which values
should be averaged. For example let's say I have 180 values recorded 
over the last 3 hours
(1 per minute)
and I would like to retrieve values recorded in the last 2 hours but
with an interval of 5 minutes, which means that my query should return
one tuple for every 5 tuples in the table and the value of this tuple
should be an average of 5 values.
Does anyone have any clue how I can make this query? I have though
about somehow grouping the tuples with group by and use the AVG
function but the tuples don't have anything in common to be grouped by.

Thank you very much in advance.
        Panos



Re: Filtering data based on timestamp

От
Richard Huxton
Дата:
Panos Kassianidis wrote:
> and I would like to retrieve values recorded in the last 2 hours but
> with an interval of 5 minutes, which means that my query should return
> one tuple for every 5 tuples in the table and the value of this tuple
> should be an average of 5 values.
> Does anyone have any clue how I can make this query? I have though
> about somehow grouping the tuples with group by and use the AVG
> function but the tuples don't have anything in common to be grouped by.

You'll need to write an enhanced version of date_trunc() that can group 
timestamps into arbitrary units, e.g.  my_date_trunc('... 12:34', 'm', 5) = '...12:30'
Then you can group by your new value.

--   Richard Huxton  Archonet Ltd


Re: Filtering data based on timestamp

От
Richard Huxton
Дата:
Panos Kassianidis wrote:
> Thanks very much for the answer.
> Could you also please tell me how am I supposed to write such a function?
> How is date_trunc implemented so that I can extend it? In C in SQL?

I'd probably write it in plpgsql unless you need the speed.

> And where can I find its source code?

With the source - available from the website.

--   Richard Huxton  Archonet Ltd