bichopapo 0 Denunciar post Postado Agosto 10, 2014 Olá pessoal estou tentando fazer um select mas não estou chegando no resultado esperado tenho uma tabela chamada REMANEJAMENTOS e uma outra chamada ALUNOS quando troco o aluno de turma, e criado um registro na tabela remanejamentos, indicando de qual turma ele saiu e para que turma ele foi... sendo assim, todas as trocas de turmas ficam guardadas. Na tabela alunos, é feito um update, mudando para a turma atual preciso de um select que me retorne a relacao de alunos da turma 30... juntamente com os alunos que já foram um dia da turma 30, ou seja, os alunos que tem na tabela remanejamento com a coluna DE = 30.. resumindo, vai retornar os alunos da turma 30, inclusive os que já foram dessa e turma e sairam para outras turmas observem que os alunos 300 e 400 não pertecem mais a essa turma, mas um dia foram dela... isso e indicado na tabela remanejamentos na coluna DE, onde guarda a turma que o aluno saiu... com esse codigo quase consegui... na verdade o resultado foi quase satisfatorio, select al.id_aluno, al.aluno, al.turma, re.id, re.de, re.para from alunos al left join remanejamentos re on al.id_aluno = re.id_aluno where (re.de = 30) or ( (al.turma = 30) observem que ele fez exatamente o q pedi, com uma pequena exceção... a aluna AMANDA, saiu da turma 30 e foi para a turma 40... depois ela voltou da 40 para a turma 30... no select que consegui, o nome dela aparece duas vezes... so preciso que apareca uma vez, ou seja, o ULTIMO registro feito para ela na tabela remanejamentos... pois como ela já é da turma 30, não preciso dos registros q ela saiu e voltou... Compartilhar este post Link para o post Compartilhar em outros sites
Motta 645 Denunciar post Postado Agosto 10, 2014 Na sua tabela de remanejamentos falta, na minha opinião , uma data , pela dats se saberia atévquando o aluno foi da turma x. Um subselect com max obteria a data mais recente. http://forum.imasters.com.br/topic/512214-selecionando-item-max/#entry2030107 Compartilhar este post Link para o post Compartilhar em outros sites
bichopapo 0 Denunciar post Postado Agosto 10, 2014 ola Motta, obrigado pela ajuda Não poderia usar o MAX no ID do remanejamento???? pegando o ultimo.... ou se criando um status para o remanejamento, dessa maneira, toda vez que remanejar um aluno, o status dos outros remanejamentos fica 0 e somento o ultimo feito fica 1... assim teriamos remanejamentos ativos e inativos... sei la, so uma ideia que surgiu aqui Na minha tabela remanejamento tem sim uma data que ele foi remanejado, mas nao coloquei no exemplo por achar que nao seria necessário... como ficaria então com a data? tentei algumas coisas aqui mas nao funcionaram... Compartilhar este post Link para o post Compartilhar em outros sites
Motta 645 Denunciar post Postado Agosto 10, 2014 Eu faria uma view que unisse um select de alunos e outro com alunos e remanejamentos,As consultas seriam nesta view com a possibilidade até de respondervem que data eram os alunos da turma x.Mas para obter o max basta fazer um subselect com a mesma query do post #1 select al.id_aluno, al.aluno, al.turma, re.id, re.de, re.para from alunos al left join remanejamentos re on al.id_aluno = re.id_aluno where ( (re.de = 30) or ( (al.turma = 30) ) and re.id = (select max(re2.id from remanejamentos re2 where re2.id_aluno = re.id_aluno) Compartilhar este post Link para o post Compartilhar em outros sites
bichopapo 0 Denunciar post Postado Agosto 10, 2014 Olá Motta, fiz como sugeriu, mas retornou apenas os remanejamentos... nao retornou os alunos que não aparecem na tabela remanejamentos.... como ficaria a sugestão q vc deu acima? Eu faria uma view que unisse um select de alunos e outro com alunos e remanejamentos," Compartilhar este post Link para o post Compartilhar em outros sites
Motta 645 Denunciar post Postado Agosto 10, 2014 De, fato. Estou num tablet ruim de ditar, amanhã se tiver tempo tento editar uma solução. Compartilhar este post Link para o post Compartilhar em outros sites
Motta 645 Denunciar post Postado Agosto 11, 2014 Uma solução que me ocorre, não sei se de boa performance select al.id_aluno, al.aluno, al.turma, re.id, re.de, re.para from alunos al left join remanejamentos re on al.id_aluno = re.id_aluno where ( (re.de = 30) or ( (al.turma = 30) ) and ( (re.id is null) or (re.id = (select max(re2.id from remanejamentos re2 where re2.id_aluno = re.id_aluno)) ) mas deve ter solução melhor Compartilhar este post Link para o post Compartilhar em outros sites