Home > Archive > PostgreSQL SQL > February 2006 > Filtering data based on timestamp









You are viewing an archived Text-only version of the thread. To view this thread in it's original format and/or if you want to reply to this thread please [click here]

 

Author Filtering data based on timestamp
Panos Kassianidis

2006-02-07, 11:24 am

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


---------------------------(end of broadcast)---------------------------
TIP 9: In versions below 8.0, the planner will ignore your desire to
choose an index scan if your joining column's datatypes do not
match

Richard Huxton

2006-02-07, 11:24 am

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

---------------------------(end of broadcast)---------------------------
TIP 9: In versions below 8.0, the planner will ignore your desire to
choose an index scan if your joining column's datatypes do not
match

Richard Huxton

2006-02-07, 11:24 am

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

---------------------------(end of broadcast)---------------------------
TIP 6: explain analyze is your friend

Sponsored Links





Also available: Server administration forum archive | Web Design forum archive | Software forum archive | Hardware reviews archive | Programming forum archive

Copyright 2008 droptable.com