Search Postgresql Archives

User entry of parameters in queries/views.

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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/
___________________________________________


[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Postgresql Jobs]     [Postgresql Admin]     [Postgresql Performance]     [Linux Clusters]     [PHP Home]     [PHP on Windows]     [Kernel Newbies]     [PHP Classes]     [PHP Books]     [PHP Databases]     [Postgresql & PHP]     [Yosemite]
  Powered by Linux