locked
Consultar cantidad de ingresos por semana en sql RRS feed

  • Pregunta

  • Hola, tengo una aplicacion en la que necesito consultar la cantidad de ingresos de un alumno por semana. Por ejemplo necesito consultar si una alumno esta autorizado a 3 clases por semana, consultar si el alumno ya ha asistido a 3 clases esa semana y de acuerdo a eso permitirle o denegarle el ingreso. El problema surge porque yo puedo contar la cantidad de ingresos del alumno con un select count(*) pero como hago para decirle a sqlserver que me cuente solo los ingresos del alumno en esa semana y no en otra??

    muchas gracias

    miércoles, 19 de mayo de 2010 7:18

Respuestas

  • Hola.

    No has declarado los parámetros. Decláralos y dales un valor:

    declare @semana tinyint
    declare @idAlumno int, @idActividad int
    select @semana = datepart(wk, getdate()), @IdAlumno = 1 , @IdActividad = 1
    select count(*)
    from Asistencias
    where asis_fecha_ingreso > '20100101' and datepart(wk, asis_fecha_ingreso) = @semana and asis_cod_alumno=@idAlumno and asis_cod_actividad=@idActividad
    group by asis_cod_alumno, datepart(wk, asis_fecha_ingreso),asis_cod_actividad

     


    Alberto López Grande (Visita mi blog en http://qwalgrande.blogspot.es/)
    viernes, 21 de mayo de 2010 18:41
    Moderador

Todas las respuestas

  • Si posteas el script de creación de las tablas involucradas y unos datos de ejemplo junto con los resultados que deseas obtener te podríamos ayudar mejor
    miércoles, 19 de mayo de 2010 7:41
  • Hola.

    Tienes que agrupar por semanas. Mira esta forma:

    --alumnos e ingresos por semana
    select alumno, semana = datepart(wk, Fecha), ingresos = count(*)
    from TablaIngresos
    where Fecha > '20100101'
    group by alumno, datepart(wk, Fecha)
    
    --alumnos que no podrían pasar en la semana en curso
    declare @semana tinyint
    select @semana = datepart(wk, getdate())
    select alumno, semana = datepart(wk, Fecha), ingresos = count(*)
    from TablaIngresos
    where Fecha > '20100101' and datepart(wk, Fecha) = @semana
    group by alumno, datepart(wk, Fecha)
    having count(*) >= 3
    

    Échale un ojo también a @@datefirst. Si tienes dudas, nos dices.

     


    Alberto López Grande (Visita mi blog en http://qwalgrande.blogspot.es/)
    miércoles, 19 de mayo de 2010 7:41
    Moderador
  • ACA MUESTRO LAS TABLAS QUE USO:

    TABLA ASISTENCIAS

    asis_codigo int

    asis_cod_alumno int

    asis_cod_actividad int

    asis_fecha_ingreso datetime

    asis_hora_ingreso datetime

     

    TABLA ALUMNOS

    cod_alumno int

    apellido varchar

    nombre varchar

     

    TABLA ACTIVIDADES

    cod_actividad int

    nombre varchar

     

    NECESITO HACER 2 CONSULTAS: UNA QUE ME DEVUELVA EL NRO DE VECES QUE EL ALUMNO INGRESO EN LA SEMANA Y

    OTRA PARA QUE ME DEVUELVA LOS INGRESOS DEL ALUMNO EN ESA SEMANA

    Muchas gracias de antemano

    miércoles, 19 de mayo de 2010 19:03
  • Hola.

    Con lo que te pasé antes, adaptándolo a los nombres reales de las tablas y añadiendo el filtro del alumno ya lo tendrías. Inténtalo y si no lo consigues, nos dices.

     


    Alberto López Grande (Visita mi blog en http://qwalgrande.blogspot.es/)
    miércoles, 19 de mayo de 2010 19:19
    Moderador
  • Hola de nuevo. Arme la consulta para que me devuelva el nro de ingresos de un alumno a una determinada actividad en la semana.

    Lo probe y anda perfecto. El problema esta en que quiero pasarle como parametros a la consulta el codigo de alumno, el codigo de actividad y me surge un error que me dice que debo declarar el parámetro idactividad y idalumno???

    declare @semana tinyint
    select @semana = datepart(wk, getdate())
    select count(*)
    from Asistencias
    where asis_fecha_ingreso > '20100101' and datepart(wk, asis_fecha_ingreso) = @semana and asis_cod_alumno=@idAlumno and asis_cod_actividad=@idActividad
    group by asis_cod_alumno, datepart(wk, asis_fecha_ingreso),asis_cod_actividad

     

    viernes, 21 de mayo de 2010 0:11
  • Hola.

    No has declarado los parámetros. Decláralos y dales un valor:

    declare @semana tinyint
    declare @idAlumno int, @idActividad int
    select @semana = datepart(wk, getdate()), @IdAlumno = 1 , @IdActividad = 1
    select count(*)
    from Asistencias
    where asis_fecha_ingreso > '20100101' and datepart(wk, asis_fecha_ingreso) = @semana and asis_cod_alumno=@idAlumno and asis_cod_actividad=@idActividad
    group by asis_cod_alumno, datepart(wk, asis_fecha_ingreso),asis_cod_actividad

     


    Alberto López Grande (Visita mi blog en http://qwalgrande.blogspot.es/)
    viernes, 21 de mayo de 2010 18:41
    Moderador
  • El problema surgia cuando yo declaro las variables, porque me dice que declare no es soportada, no se porque.

    select
     datepart
    (wk, getdate
    ())
    select count (*)
    from Asistencias
    where asis_fecha_ingreso > '20100101' and datepart (wk, asis_fecha_ingreso) = datepart (wk, getdate ())
    and asis_cod_alumno=@idAlumno and asis_cod_actividad=@idActividad
    group by asis_cod_alumno, datepart (wk, asis_fecha_ingreso),asis_cod_actividad

    asi funciona perfecto.

    mil gracias, sos un genio
    viernes, 21 de mayo de 2010 20:20