none
CONSULTA UTILIZANDO MAX Y COUNT A LA MISMA VEZ RRS feed

  • Pregunta

  • Tabla Asistencia_Estudiantes

    Num_Estudiante     Codigo_Clase     Sesion     Sesion_Clase     Asistencia     Fecha_Asistencia     Fecha_Ausencia

        101025              RECO 100             01                1                 TRUE         04/04/2016                  NULL

        101026              RECO 100             01                1                 FALSE            NULL                      04/04/2016

        101025              RECO 100             01                1                 TRUE          04/06/2016                  NULL

        101026              RECO 100             01                1                 TRUE         04/06/2016                   NULL

    El estudiante 101025 estuvo presente el dia 04/04/2016 y el dia 04/06/2016 pero el estudiante 101026 estuvo presente el dia 04/06/2016 pero estuvo ausente el dia 04/04/2016. quiero que el reporte me de el ultimo dia que el estudiante estuvo presente y la cantidad de ausencias que tuvo cuando la fecha sea menos o igual <= que 04/04/2016 osea el reporte debe quedar asi

    Num_Estudiante     Codigo_Clase     Sesion     Sesion_Clase     Fecha_Ultima_Asistencia       Ausencias

         101025             RECO 100            01                1                      04/06/2015                         0     

          101026            RECO 100            01                 1                     04/06/2016                         1

       

    martes, 12 de julio de 2016 14:43

Respuestas

  • Hola Efrain Diaz

    La consulta sería más o menos así:

    SELECT 
       Num_Estudiante,
       Codigo_Clase,
       Sesion,
       SesionClase,
       MAX(Fecha_Asistencia),
       SUM(case Asistencia when TRUE then 1 ELSE 0 END)
    FROM 
       Asistencia_Estudiante
    

    Luego podrías ordernar y más.

    Suerte!

     

    Javier

    • Marcado como respuesta Efrain Diaz martes, 12 de julio de 2016 15:08
    martes, 12 de julio de 2016 14:59

Todas las respuestas

  • Hola:

    Como determinas que la fecha de la condición sea 04/04/2016? Es un valor fijo? o es un valor que se debe calcular dentro de la misma consulta?

    SALUDOS!


    SERGIO SANCHEZ ARIAS
    facebook twitter blogger google

    martes, 12 de julio de 2016 14:53
  • Hola Efrain Diaz

    La consulta sería más o menos así:

    SELECT 
       Num_Estudiante,
       Codigo_Clase,
       Sesion,
       SesionClase,
       MAX(Fecha_Asistencia),
       SUM(case Asistencia when TRUE then 1 ELSE 0 END)
    FROM 
       Asistencia_Estudiante
    

    Luego podrías ordernar y más.

    Suerte!

     

    Javier

    • Marcado como respuesta Efrain Diaz martes, 12 de julio de 2016 15:08
    martes, 12 de julio de 2016 14:59
  • Efrain Diaz,

    No hay mas que sumarizar los resultados con las funciones MAX() y COUNT(). 

    SELECT
    	t.Num_Estudiante,
    	t.Codigo_Clase,
    	t.Sesion,
    	t.Sesion_Clase,
    	MAX(t.Fecha_Asistencia) [FechaUltimaAsistencia],
    	COUNT(Fecha_Ausencia) [Ausencias]
    FROM
    	Asistencia_Estudiantes t
    WHERE
            (t.Fecha_Asistencia <= '20160404')
    GROUP BY
    	t.Num_Estudiante,
    	t.Codigo_Clase,
    	t.Sesion,
    	t.Sesion_Clase

    martes, 12 de julio de 2016 15:01
  • cuando el valor de asistencia es true se graba la fecha del dia en la columna fecha_asistencia cuando el valor es false se graba la fecha del dia en la columna Fecha_Ausencia
    martes, 12 de julio de 2016 15:01
  • hola , lo que no me queda claro es como un alumno puede estar presente y ausente ala ves en una misma fecha

    create table Asistencia_Estudiantes
    (
    Num_Estudiante int,
    Codigo_Clase varchar(20),
    Sesion  char(2),
    Sesion_Clase char(1),
    Asistencia bit,
    Fecha_Asistencia datetime,
    Fecha_Ausencia  datetime
    )
    insert into Asistencia_Estudiantes(Num_Estudiante,Codigo_Clase,Sesion,Sesion_Clase,Asistencia,Fecha_Asistencia,Fecha_Ausencia) values
    (101025,'RECO 100','01',1,1, '04/04/2016' ,null)
    insert into Asistencia_Estudiantes(Num_Estudiante,Codigo_Clase,Sesion,Sesion_Clase,Asistencia,Fecha_Asistencia,Fecha_Ausencia) values
    (101026,'RECO 100','01',1,0, null ,'04/04/2016')
    insert into Asistencia_Estudiantes(Num_Estudiante,Codigo_Clase,Sesion,Sesion_Clase,Asistencia,Fecha_Asistencia,Fecha_Ausencia) values
    (101025,'RECO 100','01',1,1, '04/04/2016' ,null)
    insert into Asistencia_Estudiantes(Num_Estudiante,Codigo_Clase,Sesion,Sesion_Clase,Asistencia,Fecha_Asistencia,Fecha_Ausencia) values
    (101026,'RECO 100','01',1,1, '04/04/2016' ,null)
    
    
    select 
    num_estudiante,
    codigo_clase,sesion,
    sesion_clase,
    max(Fecha_Asistencia) as Fecha_Ultima_Asistencia ,
    sum(case when asistencia=0 then 1 else 0 end) as ausencias
    from Asistencia_Estudiantes
    where Fecha_Asistencia<='2016/04/04'
    group by
    num_estudiante,
    codigo_clase,sesion,
    sesion_clase


    Si la respuesta te fue útil vótala como tal,y si fue respuesta márcala.
    Saludos.
    Lima-Perú

    martes, 12 de julio de 2016 15:07