Consulta de intervalos de fechas entre dos fechas

Tengo una tabla "alumnos" asociada a través del campo "idalumno" a una tabla que registra las altas y bajas llamada "altas".

La tabla "altas" tiene los campos "f_alta" y "f_baja".

Lo que necesito es crear una consulta que me permita calcular el número de alumnos de alta (cuenta "idalumno", entre dos fechas.

2 Respuestas

Respuesta
2

José Manuel: Mira si quieres éste ejemplo que tengo en Mediafire sobre ese tema.

http://www.mediafire.com/file/zz1dw212k33mxet/FiltroA%25C3%25B1oActualYEntreFechas.rar/file 

Un saludo >> Jacinto

Respuesta
2

Si tengo la tabla

Construyo la consulta diciéndole que sólo tenga en cuenta aquellos registros en que fecha baja sea nulo, o sea, que no se han dado de baja.

Cuando la voy a abrir

Ahora me pedirá la fecha final, la escribo

Con lo cual sale

En la tabla "altas" figura lo siguiente:

monto la consulta

introduzco los datos

y

y me sale 0

En este caso tendría que salir 3 (3 alumnos de alta en el periodo del 01/06/2019 al 30/06/2019)

Entonces sólo tendrás que quitar en la consulta el campo FBaja. Recuerda que te dije que la ponía así para que sólo mostrara aquellos registros en que fecha de baja sea nulo. Yo había supuesto que si un alumno tenía fecha de baja es que había "desaparecido" y ya no se contaba con él.

¡Gracias! 

Pero de esta forma que propones no tendría en cuenta un alumno que por ejemplo se da de alta el día 1 y de baja el día 3.

Si realizo la consulta como propones teniendo en cuenta sólo el día de alta, si realizo una consulta de alumnos activos el día 2, no me saldría ese.

Vamos a ver si me aclaro, si un alumno se ha dado de baja, en principio, a mi modesto entender, ese alumno no está activo. Por eso, le ponía lo de Es nulo, es decir que no se hubiera dado de baja. Pero si la fecha de baja no se va a tener en cuenta basta con suprimir el campo de la consulta.

El objetivo sería poder hacer un cálculo exacto de los alumnos activos en un intervalo de tiempo. 

PEro cuando en la consulta pongo en fecha de baja es nulo no me hace la cuenta. 

Si un alumno de se da de  alta el día 2 de mes y de baja el día 30, si hago la consulta del día 1 al 30 de mes, ese alumno no se contabilizaría y si se habría estado de alta en ese periodo.   

Si tengo la tabla de antes

Hasta el día 15 ha habido 9 alumnos (independientemente de que se hayan dado de baja)

Si hago la consulta

Al abrirla, se comprueba que entre esas fechas ha habido 9 alumnos

Pero si en esa misma consulta en lugar de poner con fecha de inicial el día 4, pones el día 5, no te va a contar el alumno que se inscribió el día 4, y que entre el día 5 y el día 15 si ha estado de alta.

En SQL creo que no lo sé hacer, pero si te sirve en código. Si tengo la tabla

Verás que el primero se dió de baja el 11.

Si tengo el formulario

Y pulso el botón

El código del botón es

Private Sub Comando3_Click()
Dim i As Byte, d As Byte
i = DCount("*", "otra", "fechaalta between forms!formulario1!fechainicial and forms!formulario1!fechafinal")
d = DCount("*", "otra", "fechabaja between forms!formulario1!fechainicial and forms!formulario1!fechafinal")
MsgBox "En ese período ha habido " & i + d & " alumnos activos, pero también en ese mismo período se han dado de baja " & d, vbOKOnly, "Que lo sepas"
End Sub

Apenas uso consultas porque creo que el lenguaje SQL es muchísimo menos versátil que el de VB.

El código funciona bien, pero si en la "Fecha inicial" del Formulario1, introduzco la fecha anterior (04/07/2019), la cuenta de alumnos activos se descuadra y salen más alumnos cuando también tendrían que salir 9.

la cuenta de los alumnos que se han dado de baja si es correcta en todos los casos.

Lo siento pero lo dejo, me canso de no entender nada. Si tengo la tabla

Y le pregunto que alumnos estuvieron activos entre el 04/07/2018 y el 15/07/2018, según tú Wilman ha estado activo y eso no es correcto, ya que si ha estado activo pero hasta el 11/07. Del 11 al 15 no.

Lo mismo en caso de Hanari.

Entonces entre esas fechas los que realmente han estado activos han sido 7 y parcialmente activos 2. Por tanto, si pretendes que te de 9 basta simplemente con poner

Dcount("*","otra","fechaalta between...")

Si tengo 5 empleados y uno de ellos Pepe se ha marchado el día 5, cuando llega fin de mes y voy a elaborar las nóminas, miraré quien ha estado activo entre el día 1 y el 31 para pagarle todo el mes. Pero como Pepe ha estado activo hasta el 5, no lo puedo considerar como activo y pagarle lo mismo que a los otros.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas