Inquiridor
CRIAR CONSULTA POR PERÍODO

Pergunta
-
O QUE EU COLOCO NA CONSULTA NO NOT EXISTS, POR EXEMPLO DE '20081201' A '20081231', MAS QUANDO EU COLOCO COM NOT BETWEEN, O VALOR SAI DIFERENTE. ALGUÉM PODE AJUDAR??
SELECT day(TBVP.DataVendaPedido) AS DATA,
TBVP.idEmpresaFilial,
count(distinct TBVP.idcliente)FROM tbVendaPedido TBVP
INNER JOIN tbVendaPedidoItem TBVPI
ON TBVPI.NumeroPedido = TBVP.NumeroPedidoWHERE TBVP.idEmpresa = 1
AND TBVP.idEmpresaFilial IN(3,4)
AND TBVP.idSituacao = 4
AND convert(char(8),TBVP.DataVendaPedido,112) = '20080714'
AND TBVPI.idProduto = 'VIVO6'AND NOT EXISTS(select TBX.idCliente
from tbVendaPedido TBX
inner join tbVendaPedidoItem TBY
on TBY.NumeroPedido = TBX.NumeroPedido
inner join tbProduto TBZ
on TBZ.idEmpresa = TBY.idEmpresa
and TBZ.idProduto = TBY.idProduto
where TBX.idSituacao = 4
and convert(char(8),TBX.DataVendaPedido,112) < '20080714'
and TBZ.idProdutoLinha IN(5,39)
and TBX.idCliente = TBVP.idCLiente)GROUP BY TBVP.idEmpresaFilial, TBVP.DataVendaPedido
CONSULTA QUE EU FIZ, MAS HÁ DIVERGÊNCIA NOS VALORES.
SELECT TBVP.idEmpresaFilial,
day(TBVP.DataVendaPedido) AS DATA,
COUNT(DISTINCT TBVP.idcliente)FROM tbVendaPedido TBVP
INNER JOIN tbVendaPedidoItem TBVPI
ON TBVPI.NumeroPedido = TBVP.NumeroPedidoWHERE TBVP.idEmpresa = 1
AND TBVP.idEmpresaFilial IN(3,4)
AND TBVP.idSituacao = 4
AND convert(char(8),TBVP.DataVendaPedido,112) between '20081201' and '20081231'
AND TBVPI.idProduto = 'VIVO6'
AND NOT EXISTS(select TBX.idCliente
from tbVendaPedido TBX
inner join tbVendaPedidoItem TBY
on TBY.NumeroPedido = TBX.NumeroPedido
inner join tbProduto TBZ
on TBZ.idEmpresa = TBY.idEmpresa
and TBZ.idProduto = TBY.idProduto
where TBX.idSituacao = 4
and convert(char(8),TBX.DataVendaPedido,112) < '20081201'
and TBZ.idProdutoLinha IN(5,39)
and TBX.idCliente = TBVP.idCLiente)GROUP BY TBVP.DataVendaPedido,TBVP.idEmpresaFilial
ORDER BY DATA
Todas as Respostas
-
Rafael,
Primeiramente, seja bem vindo ao fórum, esperamos poder ajudar da melhor forma possível de acordo com o nosso conhecimento e disponibilidade de tempo, faça parte desta grande comunidade contribuindo com suas dúvidas, informações, conhecimento, nos ajudando a transformar este fórum em uma grande fonte de aprendizagem.
Em relação a sua dúvida, o que exatamente você deseja fazer?
Por que em alguns momentos utilizou o Not Between ou o Not Exists?
-
Deixa eu explicar de uma forma mais clara.
No script logo abaixo quero saber todos os clientes novos que o compraram num determinado dia o produto "VIVO6".
Esse script está funcionando perfeitamente.
SELECT TBVP.idEmpresaFilial,
count(distinct TBVP.idcliente)FROM tbVendaPedido TBVP
INNER JOIN tbVendaPedidoItem TBVPI
ON TBVPI.NumeroPedido = TBVP.NumeroPedidoWHERE TBVP.idEmpresa = 1
AND TBVP.idEmpresaFilial = 3
AND TBVP.idSituacao = 4
AND convert(char(8),TBVP.DataVendaPedido,112) = '20081201'
AND TBVPI.idProduto = 'VIVO6'
AND NOT EXISTS(select TBX.idCliente
from tbVendaPedido TBX
inner join tbVendaPedidoItem TBY
on TBY.NumeroPedido = TBX.NumeroPedido
inner join tbProduto TBZ
on TBZ.idEmpresa = TBY.idEmpresa
and TBZ.idProduto = TBY.idProduto
where TBX.idSituacao = 4
and convert(char(8),TBX.DataVendaPedido,112) < '20081201'
and TBZ.idProdutoLinha IN(5,39)
and TBX.idCliente = TBVP.idCLiente)GROUP BY TBVP.idEmpresaFilial
Agora eu quero que nesse script de vez de eu ficar fazendo data por data, quero fazer por um determinado periodo.
Eu fiz essa consulta, mas o distinct dentro do count não faz nada no mês.Ele traz o total dos clientes que compraram o produto 'VIVO6', e não realiza o distinct no idcliente, No primeiro script o count funcionou. Assim o problema é o seguinte, existe um cliente que compraram no 01/12/2008 e no 08/12/2008 o 'VIVO6'. Na consulta mostra esse cliente nos dois dias, sendo que o certo é informar somente no dia 01, porque ele não é mais um cliente novo que fez a compra, porque já comprou no dia 01.
Conseguiu me enteder?
SELECT TBVP.idEmpresaFilial,
count(distinct TBVP.idcliente)FROM tbVendaPedido TBVP
INNER JOIN tbVendaPedidoItem TBVPI
ON TBVPI.NumeroPedido = TBVP.NumeroPedidoWHERE TBVP.idEmpresa = 1
AND TBVP.idEmpresaFilial = 3
AND TBVP.idSituacao = 4
AND convert(char(8),TBVP.DataVendaPedido,112) between '20081201' and '20081231'
AND TBVPI.idProduto = 'VIVO6'
AND NOT EXISTS(select TBX.idCliente
from tbVendaPedido TBX
inner join tbVendaPedidoItem TBY
on TBY.NumeroPedido = TBX.NumeroPedido
inner join tbProduto TBZ
on TBZ.idEmpresa = TBY.idEmpresa
and TBZ.idProduto = TBY.idProduto
where TBX.idSituacao = 4
and convert(char(8),TBX.DataVendaPedido,112) < '20081201'
and TBZ.idProdutoLinha IN(5,39)
and TBX.idCliente = TBVP.idCLiente) -
-
-
-
-
-
-
Olha... o que eu entendi foi q vc quer, dentro de um periodo, retornar as vendas realizadas de um produto... mas so a primeira venda para cada cliente... se o cara comprar 2 veses traz so a primeira certo ?
Code SnippetSELECT
MIN(TBX.NumeroPedido)FROM
TBVENDAPEDIDO TBX
WHERE
TBX
GROUP
BY TBX.idClienteIsso deve te trazer o menos numero de pedido de um cliente para um produto no periodo... teoricamente... quanto menor o numero do pedido...
ve se isso q vc prescisa...