Re: using Avg()
От | Christoph Haller |
---|---|
Тема | Re: using Avg() |
Дата | |
Msg-id | 3E648A8A.91C289CB@rodos.fzk.de обсуждение исходный текст |
Ответ на | using Avg() ("Mark Connelly@South Central" <Mark.Connelly@ntl.com>) |
Список | pgsql-sql |
> > I have a table with a column named SwErr (Switch Error) with int values > date with datetime values and SwID with char(3) > I am trying to get a subset back where the folowing is true > > select the avg(SwErr) for the last 30 days where SwId = 'XX1' > Select the value of todays value of SwErr where SwId = 'XX1' > if todays value of SwErr is greater than 4 times the SwErr Average return in > the value > Looks like you could use a plpgsql function, something like (untested) CREATE OR REPLACE FUNCTION get_dated_SwErr(CHAR) RETURNS INTEGER AS ' DECLAREthisSwID ALIAS FOR $1;todaysSwErr INT;avgSwErr INT;avg4SwErr INT;dateLimit TIMESTAMP; BEGIN SELECT INTO dateLimit current_date - ''30 days''::interval ; SELECT INTO todaysSwErr SwErr FROM <SwTable>WHERE SwID = thisSwID AND SwDate = current_date ; SELECT INTO avgSwErr AVG(SwErr)::int FROM <SwTable>WHERE SwID = thisSwID AND SwDate BETWEEN current_date AND dateLimit ; avg4SwErr := avgSwErr * 4 ; IF todaysSwErr > avg4SwErr THENRETURN todaysSwErr; ELSERETURN avgSwErr; END IF; END; ' LANGUAGE 'plpgsql' ; then SELECT SwID, get_dated_SwErr(SwID) FROM <SwTable>WHERE SwID = 'XX1' AND SwDate = current_date ; should bring up the result. Regards, Christoph
В списке pgsql-sql по дате отправления: