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

Responder a