El día 11 de abril de 2009 12:21, Jose Gomez-Dans <jgomezd...@gmail.com> escribió: > Hola, > > Soy bastante bisoño en esto del SQL. Estoy intentando hacer una consulta que > calcula el un índice de riesgo de incendios forestales (índice de Nesterov, > hay información aquí: <http://fire.cambriacsd.org/nesterov.php>). En > esencia, tengo una tabla con una serie de variables climáticas diarias. Para > cada día, calculo un valor, y lo sumo al valor del índice del día anterior, > a no ser que se cumpla una condición en una columna (precipitación>3mm), en > cuyo caso, el índice se pone a 0. Hasta ahora, he viniendo haciendo este > cálculo fuera de Postgres, pero me gustaría hacerlo en una consulta. En C, > mi algoritmo es algo así como el código de abajo (es muy sencillo). Cómo > puedo implementar esto en SQL? > > float *nesterov_index ( float *temp, float *dew_point, float *prec ) > { > /********************************************************/ > /* A function to calculate the Nesterov Index (NI) */ > /* from daily temperature, dew point and precipitation */ > /* Function by J Gomez-Dans (KCL) */ > /********************************************************/ > > int doy ; > float *nesterov = (float*) malloc ( sizeof(float)*365) ; /*All years have > 365 days*/ > for (doy=0; doy<365; doy++) { > if (prec[doy]<3.) > { > nesterov[doy] = nesterov[doy] + temp[doy]*(temp[doy]-dew_point[doy]) > ; > } > else > { /*Rain, reset index */ > nesterov[doy] = 0.0 ; > } > } > return nesterov ; > } >
Recordá que Postgresql permite funciones en C, las tendrías que compilar como shared object y devolviendo un Datum. Respecto a hacerlo en SQL sería bastante sencillo hacer una función en PLSQL para esto. Inclusive podrías devolver un SET OF a fin de que la consulta se la hagas al resultado de la funcion, por ejemplo: select * from nesterov(); En teoría nesterov te devuelve un solo dato de acuerdo a la fecha now() El problema que observo es que para pasarlo a una funcion de PLpgsql, los paramá- metros tienen varios valores, por lo que podrías para hacerlo más sencillo tener los mismos en una tabla para ir haciendo los calculos utilizando estos. -- Emanuel Calvo Franco Sumate al ARPUG ! (www.postgres-arg.org - www.arpug.com.ar) ArPUG / AOSUG Member Postgresql Support & Admin -- TIP 7: no olvides aumentar la configuración del "free space map"