Version of Postgresql: 8.0.4
I have created a function:
-- Function: avg_max_speed_hr(timestamp, timestamp)
-- DROP FUNCTION avg_max_speed_hr("timestamp", "timestamp");
CREATE OR REPLACE FUNCTION avg_max_speed_hr("timestamp", "timestamp")
RETURNS SETOF t_avgmaxspeedhr AS
$BODY$
SELECT date_trunc('hour',ap.absolute_time), ap.agent_id, avg(ap.speed),
max(ap.speed)
FROM agent_position AS ap
WHERE ap.absolute_time BETWEEN $1 AND $2
GROUP BY date_trunc('hour',ap.absolute_time),ap.agent_id
HAVING avg(ap.speed)>0
ORDER BY date_trunc('hour',ap.absolute_time),ap.agent_id
$BODY$
LANGUAGE 'sql' VOLATILE;
ALTER FUNCTION avg_max_speed_hr("timestamp", "timestamp") OWNER TO fleetmgt;
COMMENT ON FUNCTION avg_max_speed_hr("timestamp", "timestamp") IS 'This
function returns a table of agents, their average and maximum speeds for
hourly intervals over the time interval specified.';
Which I can access in a query like this:
SELECT * FROM avg_max_speed_hr('2005-06-16 00:00:00','2005-06-17 00:00:00 ');
This works OK.
My problem is that users are using MS Access via the ODBC link to access the
database and Postgresql functions (like avg_max_speed_hr() ) are not being
recognised.
I had assumed that I could wirte in Access something like this:
SELECT * FROM avg_max_speed_hr(StartTIme,EndTime); -- *
Where prompts for the user defined variables would appear when the query is
run.
I am only new to Postgresql so I am asking if it is possible to create a view
similar to the above query(*) that can be accessed through Access.
I can rewrite it as a query in Access e.g.
SELECT Format(ap.absolute_time,"yyyy mm dd") AS [Day],
Format(ap.absolute_time,"hh") AS [Hour], Format(ap.absolute_time,"yyyy mm dd
hh") AS TimePeriod, ap.agent_id, Avg(ap.speed) AS AvgOfspeed, Max(ap.speed)
AS MaxOfspeed
FROM public_agent_position AS ap
WHERE (((ap.absolute_time) Between [StartTime] And [EndTime]))
GROUP BY Format(ap.absolute_time,"yyyy mm dd"), Format(ap.absolute_time,"hh"),
Format(ap.absolute_time,"yyyy mm dd hh"), ap.agent_id
HAVING (((Avg(ap.speed))>0))
ORDER BY Format(ap.absolute_time,"yyyy mm dd hh"), ap.agent_id;
However this runs quite slowly and I would rather defer the processing to the
server. It also poses problems in graphing because of the group statements.
Thanks for any help.
Andrew
--
___________________________________________
Andrew J. P. Maclean
Postal:
Australian Centre for Field Robotics
The Rose Street Building J04
The University of Sydney 2006 NSW
AUSTRALIA
Room:106
Phone:+61 2 9351 3283
Fax:+61 2 9351 7474
http://www.acfr.usyd.edu.au/
___________________________________________