Construindo Campo Calculado
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 ?
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
Curtidas 0
Melhor post
Emerson Nascimento
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:
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
GOSTEI 1
Mais Respostas
Silas
13/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:
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 ?
GOSTEI 0