Construindo Campo Calculado

13/01/2022

0

Olá,

Estou construindo um banco de dados no MS Access e me deparei com a dificuldades de construir campos calculados que originam de informações já presentes no banco. Meu objetivo é otimizar o processamento do banco evitando informações desnecessárias.

Estou tentando realizar um campo calculado de média móvel, por exemplo:
'ID_produto', 'Data_Cotacao' e 'Valor' como campos do banco de dado, porém quero criar o 'Media_Calc' como uma média do dos valores de 'Valor', filtrado pelo 'ID_produto' e em um determinado intervalo de 'Data_Cotacao'.

SELECT ID_produto, Data_Cotacao, Valor, AVG(Valor) AS Media_Calc
FROM Tb_Principal
GROUP BY ID_produto, Data_Cotacao, Valor, Media_Calc
HAVING ID_produto = 1 AND Data_Cotacao BETWEEN CDate('2021-09-24') AND CDate('2021-10-23')

Este código me gerou a seguinte query:
ID_Produto | Data_Cotacao | Valor | Media_Calc
1 | 24/09/2021 | 208,46 | 208,46
1 | 27/09/2021 | 211,06 | 211,06
1 | 28/09/2021 | 209,75 | 209,75
....
1 | 21/10/2021 | 230,91 | 230,91
1 | 22/10/2021 | 230,14 | 230,14

Meu problema é conseguir fazer o campo 'Media_Calc' ser a média de todos os valores entre esse intervalo mensal (de 24/09/2021 a 23/10/23).
A resposta deveria ser:
Media_Calc = 224,3119048 para todos os campos

Esse dado é possível de ser obtido ?
Silas

Silas

Responder

Post mais votado

14/01/2022

você não pode ter como resposta a média correta, se quer apresentar a data de cotação e o próprio valor.
o sistema recebeu o seguinte comando:
agrupe todos os registros que tenham o mesmo produto, a mesma data e o mesmo valor, e tire a média do valor desse agrupamento.
possivelmente você terá somente 1 registro nesse agrupamento (mesmo produto, mesma data e mesmo valor), logo a média será o próprio valor.

tente assim:

SELECT ID_produto, AVG(Valor) AS Media_Calc
FROM Tb_Principal
WHERE ID_produto = 1 AND Data_Cotacao BETWEEN CDate('2021-09-24') AND CDate('2021-10-23')
GROUP BY ID_produto

Emerson Nascimento

Emerson Nascimento
Responder

Mais Posts

17/01/2022

Silas

você não pode ter como resposta a média correta, se quer apresentar a data de cotação e o próprio valor.
o sistema recebeu o seguinte comando:
agrupe todos os registros que tenham o mesmo produto, a mesma data e o mesmo valor, e tire a média do valor desse agrupamento.
possivelmente você terá somente 1 registro nesse agrupamento (mesmo produto, mesma data e mesmo valor), logo a média será o próprio valor.

tente assim:

SELECT ID_produto, AVG(Valor) AS Media_Calc
FROM Tb_Principal
WHERE ID_produto = 1 AND Data_Cotacao BETWEEN CDate('2021-09-24') AND CDate('2021-10-23')
GROUP BY ID_produto



Emerson agradeço pela ajuda, deu certo. Porém queria que a média aparecesse junto com os outros campos ID_Produto | Data_Cotacao | Valor | Media_Calc. Você saberia me ajudar com isso ?

Além disso é possível fazer os campos de data no código como variáveis inseridas por formulário? Por exemplo:
Formulário Intervalo de Médias
Início: [Data de Início Desejada]
Fim: [Data de Fim Desejada]

A partir desses inputs consigo fazer o código ler essas datas para fazer a query ?
Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar