Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Retorno da data no interval

Boa noite,

Estou com uma duvida referente ao interval, na atividade ta pedindo Devolva a média de notas por aluno e a diferença para a média geral. No entanto, exiba apenas alunos que tiveram alguma matrícula nos últimos 3 meses.

Porém, a resposta da atividade é

select a.nome, avg(n1.nota) as media, avg(n1.nota) - (select avg(n2.nota) from nota n2) as diferenca from nota n1 join resposta r on r.id = n1.resposta_id join exercicio e on e.id = r.exercicio_id join secao s on s.id = e.secao_id join aluno a on a.id = r.aluno_id where a.id in (select aluno_id from matricula where data > now() - interval 3 month) group by a.nome;

e com isso o banco responde com um empty dizendo que não tem nada.

Já a minha resposta foi

select a.nome, avg(n.nota) as 'media do aluno', avg(n.nota) - (select avg(n1.nota) from nota n1) as 'diferença' from nota n join resposta r on n.resposta_id = r.id join exercicio e on r.exercicio_id = e.id join secao s on e.secao_id = s.id join aluno a on a.id = r.aluno_id join matricula m on m.aluno_id = a.id where m.data < now() - interval 3 month group by a.nome;

e o banco trouxe os devidos alunos e suas médias.

Enfim, minha duvida é se o sinal de > antes de puxar a data atual com o now() não estaria fazendo o banco tentar buscar com um intervalo de 3 meses a mais que a data atual, com isso tentando trazer alguma matricula nos próximos 3 meses ao invés de nos últimos 3 meses (desculpa se a pergunta ficou longa pra uma coisa simples! rsrsrs)

1 resposta
solução!

substitui o valor da data que acredito que fique mais fácil de entender.

Supondo que now - interval 3 month seja 29/08/17

primeiro caso: "... where data > 29/08/17" - vai pegar os resultados dos últimos 3 meses

segundo caso: "...where m.data < 29/08/17" - vai pegar os resultados anteriores a 3 meses

"Enfim, minha duvida é se o sinal de > antes de puxar a data atual com o now() não estaria fazendo o banco tentar buscar com um intervalo de 3 meses a mais que a data atual".

R: Acredito que não, pois vai pegar as datas a partir de 3 meses atrás (29/08/17) em diante. Como não tem filtro de data limite, vai pegar qualquer data futura também.