Re: Ayuda con consulta

From: Xavi <jarabal(at)gmail(dot)com>
To: Jose Gomez-Dans <jgomezdans(at)gmail(dot)com>, Foro PostgreSQL <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: Re: Ayuda con consulta
Date: 2009-04-11 17:47:15
Message-ID: 49E0D7A3.2070607@gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

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

In response to

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message YURIFER SANCHEZ 2009-04-12 01:40:20 Ayuda para levantar el servidor de postgresql bajo windows
Previous Message Jose Gomez-Dans 2009-04-11 15:21:21 Ayuda con consulta