Ir para conteúdo
Fórum Script Brasil
  • 0

Alunos com a último comparecimento >15 dias por mês


Guilherme Miranda

Pergunta

Olá pessoal! 
Como estão?

Preciso de uma query que mostre quais os alunos que possuem +15 dias de seu último comparecimento na escola. Preciso encontrar as evasões por mês (quantos alunos e quais alunos foram por mês).

Ex:
Em Janeiro, o último comparecimento do aluno "x" já possui +15 dias. Logo, posso considerá-lo uma evasão de Janeiro e assim para todos os meses seguintes...

Por gentileza, poderiam me auxiliar?

Obs: Não sei se estou no caminho certo, mas pensei em deixar a query abaixo como uma "temp" e agrupar a consulta de fora por "MONTH(alu.data_cad)" e "alu.cod".

Query para análise:

(       SELECT 
                  es.codigo_marca
                ,es.codigo_escola
                ,alu.cod
                ,alu.cod_sis
                ,DATE_FORMAT(alu.data_cad, '%d-%m-%Y') AS data_cad
                ,DATE_FORMAT(
                        (SELECT MAX(ca.data_comparecimento)
                            FROM Marcacao mc
                               INNER JOIN ComparecimentoAlu ca ON ca.codigo_marcacao = mc.codigo_marcacao
                                                                                                  AND mc.dt_reposicao IS NULL
                           WHERE mc.codigo_csc = cc.cod_csc), '%d-%m-%Y') AS ultimo_comparecimento
                ,ac.codigo_tp_ac
                ,es.cod_rg_escola
                ,es.cod_cl_escola
                ,cc.cod_csc
        FROM
                Aln alu
                INNER JOIN Acd ac ON alu.cod = ac.alu_cod
                INNER JOIN Esc es ON ac.codigo_escola = es.codigo_escola AND ac.data_del IS NULL
                INNER JOIN CsCont cc ON cc.codigo_acd = ac.codigo
        WHERE
                YEAR(alu.data_cad) = 2022
                AND es.codigo_escola IN (5,6,7,8,9,10)
        GROUP BY alu.cod
        ORDER BY alu.data_cad ASC
)

Desde já, agradeço a todos!

Abraços!

Link para o comentário
Compartilhar em outros sites

1 resposta a esta questão

Posts Recomendados

  • 0

Eu não consegui montar as tabelas, usando a sua consulta. Assim, eu montei uma tabela assim:
 

CREATE TABLE `tbfrequencia` (
  `id` int NOT NULL AUTO_INCREMENT,
  `data_comparecimento` datetime DEFAULT NULL,
  `idAluno` int DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8mb3 COLLATE=utf8_swedish_ci

Nessa tabela tem centenas de alunos e milhares de frequências. O problema é encontrar a última frequência de cada aluno e calcular a diferença de dias entre a última frequencia e a data de hoje:

SELECT idAluno, MAX(data_comparecimento), timestampdiff(day,max(data_comparecimento),now()) as ausencia 
FROM tbfrequencia
GROUP BY idAluno
ORDER BY ausencia desc;

 

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,4k
×
×
  • Criar Novo...