Soma entre datas
Estou tentando fazer uma consulta que some os valores entre um período e que seja de um determinado tipo.
Para que seja melhor entendido, quero fazer a soma do dia (exemplo)01/01/2006 a 30/01/2006 e que contenha a palavra credito.
tentei desta forma e da erro
se coloco o [b:5497822161]GROUP BY [/b:5497822161]da erro:
ERRO: [b:5497822161]Type mismatch in expression.[/b:5497822161]
Procurei no forum mas não encotrei nada disso aqui. :lol:
Para que seja melhor entendido, quero fazer a soma do dia (exemplo)01/01/2006 a 30/01/2006 e que contenha a palavra credito.
tentei desta forma e da erro
Select data, SUM(valor) From Financeiro Where Data Between :DataI and :DataF and cred_deb = ´cred´
se coloco o [b:5497822161]GROUP BY [/b:5497822161]da erro:
Select data, SUM(valor) From Financeiro Where Data Between :DataI and :DataF and cred_deb = ´cred´ group by data;
ERRO: [b:5497822161]Type mismatch in expression.[/b:5497822161]
Procurei no forum mas não encotrei nada disso aqui. :lol:
Vagner.oliveira
Curtidas 0
Respostas
Marco Salles
26/09/2006
group by é usado para agregar os elementos do conjunto de resultado de acordo com algum critério
No seu caso :O conjunto de resltado da sua instrução select é apenas um valor .. Ou seja uma Soma.. Portanto não há o que agregar
é válido lembrar que todos os campo não calculados devem aparecer na
clausu-la group by.. .. Mas o campo Data no seu caso , esta na clausu-la where e portando não se aplica esse critério..
No seu caso :O conjunto de resltado da sua instrução select é apenas um valor .. Ou seja uma Soma.. Portanto não há o que agregar
é válido lembrar que todos os campo não calculados devem aparecer na
clausu-la group by.. .. Mas o campo Data no seu caso , esta na clausu-la where e portando não se aplica esse critério..
GOSTEI 0
Siam
26/09/2006
Para mim, seu segundo Select com Grou By está correto. O erro dado é em relação aos tipos de dados dos campos.
Como está no Banco o campo Data e como vc alimenta :DataI e :DataF ?
Como está no Banco o campo Data e como vc alimenta :DataI e :DataF ?
GOSTEI 0
Marco Salles
26/09/2006
Para mim, seu segundo Select com Grou By está correto. O erro dado é em relação aos tipos de dados dos campos.
Como está no Banco o campo Data e como vc alimenta :DataI e :DataF ?
Se segunda esta ´certa´ ,[b:59ea8d787f] a primeira tb esta[/b:59ea8d787f] ... Mesmo que não de erro na segunda acho no minimo esquisito Agrupar algo do nada
o fato é que li o post rapidamente e não vi qua o amigo [b:59ea8d787f]não tinha conseguido[/b:59ea8d787f] com a primeira instrução
o fato é que se tem um erro do tipo apresentado ERRO: Type mismatch in expression.
query1.Params[0].AsDate:=coloque aqui uma data;
query1.Params[1].AsDate:=coloque aqui uma data;
query1.params[2].asstring:=´credito´
isto resolve quanto ao problema do erro apresentado... Mas o groupBy acho desnecessário
GOSTEI 0
Macario
26/09/2006
Ola.
Pelo visto no codigo, ele quer a soma diaria de um periodo e nao a soma total do periodo, portanto o uso da agregacao.
Exemplo:
Pelo visto no codigo, ele quer a soma diaria de um periodo e nao a soma total do periodo, portanto o uso da agregacao.
Exemplo:
Qry.Close; Qry.Params.ParamByName(´DATAI´).asDatetime = DataI; Qry.Params.ParamByName(´DATAF´).asDatetime = DataF; Qry.Open;
GOSTEI 0
Siam
26/09/2006
[quote:154481c0bb=´Marco Salles´]Se segunda esta ´certa´ , a primeira tb esta ... Mesmo que não de erro na segunda acho no minimo esquisito Agrupar algo do nada[/quote:154481c0bb]Não, a primeira dará erro pq vc não pode ter um campo Sum com outro(s) campo(s) sem agrupar; faça um teste.
O agrupamento faz sentido, desde que ele queira a soma dos valores por data.
O agrupamento faz sentido, desde que ele queira a soma dos valores por data.
GOSTEI 0
Marco Salles
26/09/2006
a clausula groupBy existe para fixação de grupos .. Não é o caso dele
Sua sql retornara [b:abd0172705]apenas um unico valor [/b:abd0172705]e não precisa ou não tem que agrupar nada...
isto não é agrupamento .. isto é apenas uma[b:abd0172705] restrição [/b:abd0172705]
Alem da restrição por data ainda tem a restrição que os registros tenham a palavra credito
e o campo credio , ande voce colocaria na clausula Group By ????
pode não dar erro , mas não tem sentido
Sua sql retornara [b:abd0172705]apenas um unico valor [/b:abd0172705]e não precisa ou não tem que agrupar nada...
O agrupamento faz sentido, desde que ele queira a soma dos valores por data.
isto não é agrupamento .. isto é apenas uma[b:abd0172705] restrição [/b:abd0172705]
Alem da restrição por data ainda tem a restrição que os registros tenham a palavra credito
Para que seja melhor entendido, quero fazer a soma do dia (exemplo)01/01/2006 a 30/01/2006 e que contenha [b:abd0172705]a palavra credito.[/b:abd0172705]
e o campo credio , ande voce colocaria na clausula Group By ????
Select data, SUM(valor) From Financeiro
Where Data Between :DataI and :DataF
and cred_deb = ´cred´
group [b:abd0172705]by data , Cred_deb[/b:abd0172705]
pode não dar erro , mas não tem sentido
GOSTEI 0
Siam
26/09/2006
Supondo que se tenha vários registros (Crédito e Débito); e querer a soma por dia somente dos registros de crédito; daí entra no Where o período de datas e o tipo ´cred´. O tipo cred deve entrar no filtro e não no Group By.
Não faria sentido se se quisesse a soma total do período, aí o campo data teria que ser retirado do Select.
Não faria sentido se se quisesse a soma total do período, aí o campo data teria que ser retirado do Select.
GOSTEI 0
Macario
26/09/2006
Para nao haver equivoco.
Compreende.
Dados: DATA-----VALOR > TIPO 10/09-----200,00 > DEB 10/09-----150,00 > CRE 10/09-----100,00 > CRE 11/09-----200,00 > DEB 11/09-----150,00 > CRE 11/09-----100,00 > CRE
Select data, SUM(valor) From Financeiro Where Data Between :DataI and :DataF and cred_deb = ´cred´
Resultado DATA-----VALOR 10/09-----250,00 11/09-----250,00
Compreende.
GOSTEI 0
Vagner.oliveira
26/09/2006
as datas sao entre um mes inteiro so separando se conter a palavra credito....
GOSTEI 0
Siam
26/09/2006
Código:
Select data, SUM(valor) From Financeiro
Where Data Between :DataI and :DataF
and cred_deb = ´cred´
Se não colocar Group By data, para mim dá erro. Não dá para você ?GOSTEI 0
Vagner.oliveira
26/09/2006
Para nao haver equivoco.
Compreende.
Dados: DATA-----VALOR > TIPO 10/09-----200,00 > DEB 10/09-----150,00 > CRE 10/09-----100,00 > CRE 11/09-----200,00 > DEB 11/09-----150,00 > CRE 11/09-----100,00 > CRE
Select data, SUM(valor) From Financeiro Where Data Between :DataI and :DataF and cred_deb = ´cred´
Resultado DATA-----VALOR 10/09-----250,00 11/09-----250,00
Compeendo, so não entendo porque da este erro:
[b:cd908d6428]GROUP BY is required when both aggregate and non-aggregate fields are used in result set.[/b:cd908d6428]
GOSTEI 0
Macario
26/09/2006
Ola, desculpem.
Sim o group by e requerido
corrigindo o post.
Sim o group by e requerido
corrigindo o post.
Para nao haver equivoco.
Compreende.
Dados: DATA-----VALOR > TIPO 10/09-----200,00 > DEB 10/09-----150,00 > CRE 10/09-----100,00 > CRE 11/09-----200,00 > DEB 11/09-----150,00 > CRE 11/09-----100,00 > CRE
Select data, SUM(valor) From Financeiro Where Data Between :DataI and :DataF and cred_deb = ´cred´ [b]group by data[/b]
Resultado DATA-----VALOR 10/09-----250,00 11/09-----250,00
GOSTEI 0
Fknyght
26/09/2006
Select data, SUM(valor) From Financeiro Where Data >= :DataI and data <= :DataF and cred_deb like ´cred¬´ group by data
tenta ai, ve se resolve
GOSTEI 0
Marco Salles
26/09/2006
Ola, desculpem.
Sim o group by e requerido
[b:dac6ae2a47]corrigindo o post. [/b:dac6ae2a47]
Macario escreveu:
Para nao haver equivoco.
Código:
Dados:
DATA-----VALOR > TIPO
10/09-----200,00 > DEB
10/09-----150,00 > CRE
10/09-----100,00 > CRE
11/09-----200,00 > DEB
11/09-----150,00 > CRE
11/09-----100,00 > CRE
Código:
Select [b:dac6ae2a47]data,[/b:dac6ae2a47] SUM(valor) From Financeiro
Where Data Between :DataI and :DataF
and cred_deb = ´cred´
[b:dac6ae2a47]group by data[/b:dac6ae2a47]
Código:
Resultado
DATA-----VALOR
10/09-----250,00
11/09-----250,00
Compreende.
olha , escrevi alguma coisa e fiz outra
[b:dac6ae2a47]eu não vi o campo data[/b:dac6ae2a47] fazendo parte do[b:dac6ae2a47] select.. [/b:dac6ae2a47]To desde do inico falando que o resultado seria um unico valor.. Recebi notificaçoes dizendo da clausula do GroupBy , mas nada contestando esta afirmação
group by é usado para agregar os elementos do conjunto de resultado de acordo com algum critério
No seu caso :O conjunto de resultado da sua instrução select é apenas um valor .. Ou seja uma Soma.. Portanto não há o que agregar
pensei que o select era este :oops: :oops:
Select SUM(valor) From Financeiro
Where Data Between :DataI and :DataF
and cred_deb = ´cred´
por isso estava batendo na tecla que não precisa do Group-By porque para mim ele estava fazendo somente uma soma em um detreminado periodo
agora que o [b:dac6ae2a47]marcario[/b:dac6ae2a47] postou , vi que tinha o [b:dac6ae2a47]campo data [/b:dac6ae2a47], :cry: ai fui ver o post original vi tb que tinha o campo data :cry: .. Ora , sto não era nen para ´discutir´ , pois todos sabemos que :
[b:dac6ae2a47]Todos os campos não calculados devem aparecer na clausula Group_by[/b:dac6ae2a47]
é.......
GOSTEI 0
Macario
26/09/2006
Ola, Marco.
Por isso coloquei para nao ter [b:cb865f0363]Equivoco[/b:cb865f0363].
O posto do nosso colega Vagner, estava sem maiores indicacoes da necessidade dele, se o agrupamento era geral pelo periodo(no caso se aplica a tua indicacao inicial), ou por data dentro do periodo conforme o exemplo que postei.
[]´s
Por isso coloquei para nao ter [b:cb865f0363]Equivoco[/b:cb865f0363].
O posto do nosso colega Vagner, estava sem maiores indicacoes da necessidade dele, se o agrupamento era geral pelo periodo(no caso se aplica a tua indicacao inicial), ou por data dentro do periodo conforme o exemplo que postei.
[]´s
GOSTEI 0
Vagner.oliveira
26/09/2006
Select data, SUM(valor) From Financeiro Where Data >= :DataI and data <= :DataF and cred_deb like ´cred¬´ group by data
Já tinha tendado antes e da o mesmo erro:
[b:a6ec1b179f]Type mismatch in expression.[/b:a6ec1b179f]
GOSTEI 0
Macario
26/09/2006
Para mim, seu segundo Select com Grou By está correto. O erro dado é em relação aos tipos de dados dos campos.
Como está no Banco o campo Data e como vc alimenta :DataI e :DataF ?
Verifique as indicacoes passadas pelo colega [b:0d79be72b9]siam[/b:0d79be72b9].
Pois o erro nao se encontra na instrucao, em especifico. :!:
GOSTEI 0
Vagner.oliveira
26/09/2006
[quote:cff0b1d0fc=´siam´]Para mim, seu segundo Select com Grou By está correto. O erro dado é em relação aos tipos de dados dos campos.
Como está no Banco o campo Data e como vc alimenta :DataI e :DataF ?
Verifique as indicacoes passadas pelo colega [b:cff0b1d0fc]siam[/b:cff0b1d0fc].
Pois o erro nao se encontra na instrucao, em especifico. :!:[/quote:cff0b1d0fc]
achei o problema. valew
GOSTEI 0
Macario
26/09/2006
achei o problema. valew
Poderia nos informar qual era. :?:
[]´s 8)
GOSTEI 0