Jose,
Creo que deberías corregir esto en C para calcular bien el índice a partir de
la primera precipitación mayor de 3mm.
nesterov[doy] = nesterov[doy] + temp[doy]*(temp[doy]-dew_point[doy]) ;
nesterov[doy] = (doy ? nesterov[doy-1] : 0.) +
temp[doy]*(temp[doy]-dew_point[doy]) ;
Respecto a hacerlo en SQL yo calculo los acarreos procesando el resultado de la
consulta, fuera de Postgres, esto sería algo
parecido porque necesita el dato anterior. Creo que se puede mediante una
función pero no sé hacerlo en una sóla consulta SQL.
Xavi
Jose Gomez-Dans 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 ;
}
Muchas gracias por vuestra ayuda!
J
--
TIP 6: ¿Has buscado en los archivos de nuestra lista de correo?
http://archives.postgresql.org/pgsql-es-ayuda