Consulta access trimestre según temporada (invierno primavera...)

ACCESS 2007) con fecha del 20 de marzo al 20 de junio por la primavera y del 20 de diciembre de un año al 20 de marzo por el invierno del año+1.

He probado TRIMESTRE pero sigue los trimestre del calendario.

Yo quiero según las temporadas del año.

En mi tabla tengo un campo FECHA con fecha corta y un campo LLUVIA numero.

Si alguien puede echarme una mano, seria bienvenido.

Hasta pronto

1 Respuesta

Respuesta
1

Muy fácil, te creas una función que te de la estación a que corresponde una fecha y la usas en la consulta.

Un ejemplo podría ser éste:

Public Function fncEstacion(unaFecha As Date) As String
Select Case unaFecha
    Case DateSerial(Year(unaFecha), 3, 21) To DateSerial(Year(unaFecha), 6, 20)
        fncEstacion = "Primavera"
    Case DateSerial(Year(unaFecha), 6, 21) To DateSerial(Year(unaFecha), 9, 20)
        fncEstacion = "Verano"
    Case DateSerial(Year(unaFecha), 9, 21) To DateSerial(Year(unaFecha), 12, 20)
        fncEstacion = "Otoño"
    Case Else
        fncEstacion = "Invierno"
End Select
End Function

Para usarla en tu BD, creas un módulo nuevo, pegas la función y luego la usas donde quieras como cualquier función nativa de Access, por ejemplo, en una consulta puedes sacar la estación con:

Estacion: fncEstacion([FECHA])

Si quieres obtener números en vez de los nombres de las estaciones, puedes hacerle un pequeño cambio, así:

Public Function fncEstacion(unaFecha As Date) As Byte
Select Case unaFecha
    Case DateSerial(Year(unaFecha), 3, 21) To DateSerial(Year(unaFecha), 6, 20)
        fncEstacion = 1
    Case DateSerial(Year(unaFecha), 6, 21) To DateSerial(Year(unaFecha), 9, 20)
        fncEstacion = 2
    Case DateSerial(Year(unaFecha), 9, 21) To DateSerial(Year(unaFecha), 12, 20)
        fncEstacion = 3
    Case Else
        fncEstacion = 4
End Select
End Function

Un saludo.


     bit.ly/ForoNkSv 

Gracias Sveinbjorn El Rojo,

Aunque no conozco bien el uso de las funciones en VB, me parece muy bien tu proposición.

pero creo que así, invierno me sumará los resultado del 01/01 al 20/03 y del 21/12 al 31/12 del mismo año. Necesito que suma los datos  del 21/12 al 31/12 del año anterior porque el invierno empieza el 22 de diciembre de un año X hasta el 20 de marzo del año X+1.

Un saludo

En teoría no, porque con el Else, cualquier fecha que no coincida con primavera, verano u otoño, será invierno.

Pero si así no te convence,  quita el Case Else y cambialo por otro Case en el que fijes las fechas del invierno. 


Gracias Sveinbjorn El Rojo,

Ni me iba lo la función.

Entonces es creado una consulta poniendo a la fecha 11 día más así el 21 de diciembre es el 01 de enero del año siguiente. Y después usando consulta por trimestre.

Gracias por tu ayuda porque aprendí un poco más sobre las funciones aunque me falta mucho para aprender.

Un saludo

Pues la función funciona sin problema, que la probé antes de responder...

Ahí te dejo un ejemplo para que puedas comprobar dónde has fallado: http://filebig.net/files/bc4trSarpr 

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas