Ir ao conteúdo
  • Cadastre-se
Sunscreen

Consulta últimos meses sql access

Recommended Posts

Olá, preciso efetuar uma consulta que me retorne o número de acessos dos últimos 3 meses a partir da última data máxima registrada no banco(não é necessariamente o mês atual a última data).

Consigo pegar o último mês utilizando "Month(Max([RESUMO]![Data])" porém quando faço o código da seguinte maneira:

SELECT RESUMO.Data, Sum(RESUMO.Acesso) AS SumOfAcessoFROM RESUMOGROUP BY RESUMO.DataHAVING Month([RESUMO]![Data])>Month(Max([RESUMO]![Data]))-3
 
Todos meses são me retornados, pela lógica imagino que apenas os meses que são maiores que o máximo menos 3 deveriam vir, mas não é o que acontece.
 
Alguma dica ?

Compartilhar este post


Link para o post
Compartilhar em outros sites
Você quer retornar algo em um período de 3 meses certo?

 

Por que então você não põe isso no where, de forma bem mais simples?

 


SET @mes_limite:=10;
SET @ano_limite:=2014;
 
SELECT RESUMO.Data
      ,Sum(RESUMO.Acesso) AS SumOfAcesso
FROM RESUMO
WHERE MONTH(RESUMO.Data) BETWEEN @mes_limite - 2 AND @mes_limite
  AND YEAR(RESUMO.Data) = @ano_limite
GROUP BY RESUMO.Data;

 

Bom, se o mês limite for um MARÇO, então trará resultados de MARÇO menos 2, que é JANEIRO, até MARÇO (ou seja, 3 meses).

 

Coloquei um tratamento para o ANO, mas isso fica com você melhorar, pois se pedir um relatório de FEVEREIRO, terá que fazer um tratamento adequado pra retornar o que precisas.

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

Você quer retornar algo em um período de 3 meses certo?
 
Por que então você não põe isso no where, de forma bem mais simples?
 
SET @mes_limite:=10;SET @ano_limite:=2014; SELECT RESUMO.Data      ,Sum(RESUMO.Acesso) AS SumOfAcessoFROM RESUMOWHERE MONTH(RESUMO.Data) BETWEEN @mes_limite - 2 AND @mes_limite  AND YEAR(RESUMO.Data) = @ano_limiteGROUP BY RESUMO.Data;
 
Bom, se o mês limite for um MARÇO, então trará resultados de MARÇO menos 2, que é JANEIRO, até MARÇO (ou seja, 3 meses).
 
Coloquei um tratamento para o ANO, mas isso fica com você melhorar, pois se pedir um relatório de FEVEREIRO, terá que fazer um tratamento adequado pra retornar o que precisas.

 

 

 

Obrigado pela sugestão, acabei de conseguir resolver parcialmente de uma forma aparentemente mais simples e estava vindo aqui postar , porém agora não estou conseguindo nessa mesma consulta retornar a soma dos acessos desses 3 meses retornados, é possível fazer isso com o que fiz abaixo ?

SELECT TOP 3 RESUMO.Data, Sum(RESUMO.Acesso) AS SumOfAcessoFROM RESUMOGROUP BY RESUMO.DataORDER BY RESUMO.Data DESC;

Dessa forma tenho como retorno:

 

Data            SumOfAcesso
01/10/2014 45470
01/09/2014 45355
01/08/2014 43981
 
É possível adicionar nessa mesma consulta um campo total com a soma de SumOfAcesso ?

Compartilhar este post


Link para o post
Compartilhar em outros sites
Oi Sunscreen.

 

O comando TOP eu pra falar a vdd nunca usei, mas entendi como funciona

 

Você pode fazer um SELECT externo nesse mesmo SELECT já pronto, bem simples...

 


SELECT SUM(SumOfAcesso) AS TOTAL FROM (
   SELECT TOP 3 RESUMO.Data, Sum(RESUMO.Acesso) AS SumOfAcesso
   FROM RESUMO
   GROUP BY RESUMO.Data
   ORDER BY RESUMO.Data DESC;
) AS S1 GROUP BY SumOfAcesso;

Compartilhar este post


Link para o post
Compartilhar em outros sites

É esse TOP 3 endemoniado aí ^^ (to testando com mysql)

 

Isso resolve:
 
SELECT SUM(SumOfAcesso) AS TOTAL FROM (   SELECT Data, Sum(Acesso) AS SumOfAcesso   FROM RESUMO   GROUP BY Data   ORDER BY Data DESC LIMIT 0,3) AS S1 GROUP BY SumOfAcesso;

Compartilhar este post


Link para o post
Compartilhar em outros sites

Agora deu "Syntax error in Order BY clause." será que o access suporta esse limit ?

 

@tenho que sair, amanhã de manhã volto e digo se houve algum progresso hehe

Compartilhar este post


Link para o post
Compartilhar em outros sites

A entendi... é por isso que citei que estou usando mysql, desconfiei q tivesse problema entre a linguagem q estou fazendo, e a linguagem q você está usando =/

 

Sobre access não sei te dizer como ficaria esse select

Compartilhar este post


Link para o post
Compartilhar em outros sites

Deu certo da seguinte maneira:

SELECT TOP 3     Format (R.Data,"@") AS DataAcesso,     Sum (R.Acesso) AS SumOfAcesso  From Resumo R  Group by R.Data  Order by R.Data DESCUnionSelect    "Total",    SUM(auxsum)  From ( SELECT TOP 3 Sum(R.Acesso) as auxsum              From Resumo R              Group by R.Data              Order by R.Data DESC  )

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×