SELECT MAX
Boa Noite, estou na seguinte situação e queria uma mão dos irmãos do VBmania
Tenho uma tabela de Venda com os seguintes campos:
Campo1 (tipodata), campo5(texto-cliente) e campo4(numero)
preciso saber qual cliente comprou mais entre um periodo de tempo, tentei assim:
Select max(total) as Valor, campo5, per from(SELECT sum(campo4) as Total, campo5, month(campo1) as Per FROM C_Ven where (Campo1 Between #03/01/2009# AND #03/18/2010#) Group by campo5, month(campo1)) group by campo5, per
O resultado é o valor maximo de cada cliente no mes e eu preciso do valor maximo apenas e nao de todos os clientes levando em consideração que o mesmo pode aparecer se tiver efetuado o maior numero de compras em meses destintos.
Precisaria de um filtro que anulasse group by no primeiro Select.
Desde ja agradeço!
Tenho uma tabela de Venda com os seguintes campos:
Campo1 (tipodata), campo5(texto-cliente) e campo4(numero)
preciso saber qual cliente comprou mais entre um periodo de tempo, tentei assim:
Select max(total) as Valor, campo5, per from(SELECT sum(campo4) as Total, campo5, month(campo1) as Per FROM C_Ven where (Campo1 Between #03/01/2009# AND #03/18/2010#) Group by campo5, month(campo1)) group by campo5, per
O resultado é o valor maximo de cada cliente no mes e eu preciso do valor maximo apenas e nao de todos os clientes levando em consideração que o mesmo pode aparecer se tiver efetuado o maior numero de compras em meses destintos.
Precisaria de um filtro que anulasse group by no primeiro Select.
Desde ja agradeço!
Em primeiro lugar você não citou o tipo de banco de utiliza.
Pelo que entendi o você tem o cliente, a data da venda e o número de itens ou valor da compra.
Para saber os clientes que mais compraram numa data:
EXEMPLO NO BANCO POSTGREE
Resultado:
mes nome total
03 Laura 18
03 Marcos 8
03 Germanir 2
03 Germanir 3
03 Germanir 2
03 Marcos 5
04 José 4
OBS: POSTGREE CONVERSÃO DE DATA é O TO_CHAR
MYSQL DATA_FORMAT
SQL SERVER CONVERT
FIREBIRD (ainda não sei) rssss
Pelo que entendi o você tem o cliente, a data da venda e o número de itens ou valor da compra.
Para saber os clientes que mais compraram numa data:
EXEMPLO NO BANCO POSTGREE
CREATE TABLE VENDAS(
nome varchar(50),
ndata date,
numero int
)
INSERT INTO VENDAS
VALUES ([ô]Germanir[ô],[ô]2010-03-17[ô],2),
([ô]Germanir[ô],[ô]2010-03-18[ô],3),
([ô]Germanir[ô],[ô]2010-03-19[ô],2),
([ô]Marcos[ô],[ô]2010-03-30[ô],5),
([ô]Marcos[ô],[ô]2010-03-17[ô],6),
([ô]Laura[ô],[ô]2010-03-17[ô],8),
([ô]Marcos[ô],[ô]2010-03-17[ô],2),
([ô]José[ô],[ô]2010-04-17[ô],2),
([ô]Laura[ô],[ô]2010-03-17[ô],10),
([ô]José[ô],[ô]2010-04-17[ô],2);
select to_char(ndata,[ô]mm[ô]) as mes ,nome, sum(numero) as total from vendas
where ndata between [ô]2010-03-01[ô] and [ô]2010-04-30[ô]
group by ndata, nome
order by ndata, total DESC;
Resultado:
mes nome total
03 Laura 18
03 Marcos 8
03 Germanir 2
03 Germanir 3
03 Germanir 2
03 Marcos 5
04 José 4
OBS: POSTGREE CONVERSÃO DE DATA é O TO_CHAR
MYSQL DATA_FORMAT
SQL SERVER CONVERT
FIREBIRD (ainda não sei) rssss
O Banco é Acess
Minha Consulta retorna identico a sua.
No seu exemplo a consulta retornou 5 clientes no mes 3, e o q eu quero é apenas o cliente que efetuaou mais compras,
se fosse para saber so o maior valor bataria usar o MAX, mas preciso Saber o Valor, o cliente e o mes.
Minha Consulta retorna identico a sua.
No seu exemplo a consulta retornou 5 clientes no mes 3, e o q eu quero é apenas o cliente que efetuaou mais compras,
se fosse para saber so o maior valor bataria usar o MAX, mas preciso Saber o Valor, o cliente e o mes.
Tente assim:
Select top 1 max(total) as Valor, campo5, per from(SELECT sum(campo4) as Total, campo5, month(campo1) as Per FROM C_Ven where (Campo1 Between #03/01/2009# AND #03/18/2010#) Group by campo5, month(campo1)) group by campo5, per order by max(total) desc
* o problema se tivermoss um [ô]empate[ô] entre dois clientes O_0
Select top 1 max(total) as Valor, campo5, per from(SELECT sum(campo4) as Total, campo5, month(campo1) as Per FROM C_Ven where (Campo1 Between #03/01/2009# AND #03/18/2010#) Group by campo5, month(campo1)) group by campo5, per order by max(total) desc
* o problema se tivermoss um [ô]empate[ô] entre dois clientes O_0
Assim ele so traz o Cliente que mais comprou em toda a busca, e eu preciso do cliente que mais comprou em cada mes do periodo da busca.
To tentando
To tentando
Como nao consegui usando consulta fiz assim:
[ô]por nao agrupar nome e da mes junto a atualização é feita em duas etapas
Abri tb1, [Ô]Select max(total) as Valor, per [Ô] & _
[Ô]from(SELECT sum(campo4) as Total, campo5, month(campo1) as Per FROM C_Ven where [Ô] & _
[Ô](Campo1 Between #[Ô] & Format(Mask(0), [Ô]mm/dd/yyyy[Ô]) & [Ô]# AND #[Ô] & Format(Mask(1), [Ô]mm/dd/yyyy[Ô]) & _
[Ô]#) Group by campo5, month(campo1)) group by per[Ô]
Do While Not tb1.EOF
DoEvents
mConn.Execute [Ô]Update Mes Set saldo=[ô][Ô] & Format(tb1!Valor, [Ô]#,###,###,##0.00[Ô]) & [Ô][ô] Where campo0=[Ô] & tb1!per
tb1.MoveNext
Loop
tb1.Close
Abri tb1, [Ô]Select max(total) as Valor, campo5, per [Ô] & _
[Ô]from(SELECT sum(campo4) as Total, campo5, month(campo1) as Per FROM C_Ven where [Ô] & _
[Ô](Campo1 Between #[Ô] & Format(Mask(0), [Ô]mm/dd/yyyy[Ô]) & [Ô]# AND #[Ô] & Format(Mask(1), [Ô]mm/dd/yyyy[Ô]) & _
[Ô]#) Group by campo5, month(campo1)) group by campo5, per[Ô]
Do While Not tb1.EOF
DoEvents
mConn.Execute [Ô]Update Mes Set cliente=[ô][Ô] & tb1!campo5 & [Ô][ô] Where Saldo=[ô][Ô] & Format(tb1!Valor, [Ô]#,###,###,##0.00[Ô]) & [Ô][ô][Ô]
tb1.MoveNext
Loop
tb1.Close
Alguem ve falhas
[ô]por nao agrupar nome e da mes junto a atualização é feita em duas etapas
Abri tb1, [Ô]Select max(total) as Valor, per [Ô] & _
[Ô]from(SELECT sum(campo4) as Total, campo5, month(campo1) as Per FROM C_Ven where [Ô] & _
[Ô](Campo1 Between #[Ô] & Format(Mask(0), [Ô]mm/dd/yyyy[Ô]) & [Ô]# AND #[Ô] & Format(Mask(1), [Ô]mm/dd/yyyy[Ô]) & _
[Ô]#) Group by campo5, month(campo1)) group by per[Ô]
Do While Not tb1.EOF
DoEvents
mConn.Execute [Ô]Update Mes Set saldo=[ô][Ô] & Format(tb1!Valor, [Ô]#,###,###,##0.00[Ô]) & [Ô][ô] Where campo0=[Ô] & tb1!per
tb1.MoveNext
Loop
tb1.Close
Abri tb1, [Ô]Select max(total) as Valor, campo5, per [Ô] & _
[Ô]from(SELECT sum(campo4) as Total, campo5, month(campo1) as Per FROM C_Ven where [Ô] & _
[Ô](Campo1 Between #[Ô] & Format(Mask(0), [Ô]mm/dd/yyyy[Ô]) & [Ô]# AND #[Ô] & Format(Mask(1), [Ô]mm/dd/yyyy[Ô]) & _
[Ô]#) Group by campo5, month(campo1)) group by campo5, per[Ô]
Do While Not tb1.EOF
DoEvents
mConn.Execute [Ô]Update Mes Set cliente=[ô][Ô] & tb1!campo5 & [Ô][ô] Where Saldo=[ô][Ô] & Format(tb1!Valor, [Ô]#,###,###,##0.00[Ô]) & [Ô][ô][Ô]
tb1.MoveNext
Loop
tb1.Close
Alguem ve falhas
tenta assim
Select Max(sum(campo4)) as Total, campo5, per from C_Ven where (Campo1 Between #03/01/2009# AND #03/18/2010#) Group by campo5, month(campo1)) group by campo5, per
Tópico encerrado , respostas não são mais permitidas