none
Select para trazer ultimo Vendedor nos Pedidos RRS feed

  • Pergunta

  • Boa Tarde galera....

    Tenho a seguinte Instucacao :  

    Select (CodCliente) as Cliente,Max(DataPedido) as DataUltPed,
       DateDiff(day,Max(DataPedido),getdate()) as Dias,min(Cidades.NomCid) as Cidade,
    Min(EqClid.NomCli) as NomeCliente,min(Eqclid.DDDCli+'-'+Eqclid.FonCli) as Fone,
    Sum(TotPedido) as TotCompa
    from Pedidos
    Inner join Eqclid on Pedidos.CodCliente=Eqclid.CodCli
    inner join Cidades on Eqclid.CodCid=Cidades.CodCid
    inner join Eqvend on Pedidos.CodVen=EqVend.CodVen
    where SitCli=0 and (TravaCli=' ' or TravaCli is null)
    and (restricao=' ' or restricao is null)and Cancelado is null
    and EstCid like '%'
    Group by CodCliente
    having DateDiff(day,Max(DataPedido),getdate()) >=60
    Order by cliente desc

    Gostaria de Saber como eu pego o nome do Ultimo vendedor que fez pedido para este Cliente.?

    Obrigadoo

    segunda-feira, 15 de outubro de 2012 17:28

Respostas

  • Supondo que uma coluna chamada IdPedido seja a PK da tabela Pedidos, e que MAX(IdPedido) retorne o Id do último pedido, experimente desta forma:

    with CTE as
    (
        select CodCliente, Max(DataPedido) as DataUltPed, Sum(TotPedido) as TotCompa, Max(IdPedido) as IdUltPed
        from Pedidos
        group by CodCliente
        having DateDiff(day, Max(DataPedido), getdate()) >= 60
    )
    
    Select 
        CTE.CodCliente as Cliente,
        CTE.DataUltPed, 
        DateDiff(day, CTE.DataUltPed, getdate()) as Dias,
        Cidades.NomCid as Cidade,
        EqClid.NomCli as NomeCliente,
        Eqclid.DDDCli + '-' + Eqclid.FonCli as Fone,
        Pedidos.CodVen,
        Eqvend.NomeVen,
        CTE.TotCompa
    from CTE
    inner join Pedidos on Pedidos.CodCliente = CTE.CodCliente and Pedidos.IdPedido = CTE.IdUltPed
    Inner join Eqclid on Pedidos.CodCliente = Eqclid.CodCli
    inner join Cidades on Eqclid.CodCid = Cidades.CodCid
    inner join Eqvend on Pedidos.CodVen = EqVend.CodVen
    where SitCli=0 and (TravaCli=' ' or TravaCli is null)
    and (restricao=' ' or restricao is null) and Cancelado is null
    Order by cliente desc
    Espero que ajude.


    Assinatura: http://www.imoveisemexposicao.com.br

    • Marcado como Resposta Decio Morais terça-feira, 16 de outubro de 2012 14:20
    terça-feira, 16 de outubro de 2012 13:28

Todas as Respostas

  • Decio,

    Na cláusula WHERE é adicionado um ''filtro'' onde você selecionará apenas as DataPedido máximas agrupadas pelo CodCliente. 

    Select (CodCliente) as Cliente,(DataPedido) as DataUltPed, 
       DateDiff(day,(DataPedido),getdate()) as Dias,min(Cidades.NomCid) as Cidade,
    Min(EqClid.NomCli) as NomeCliente,min(Eqclid.DDDCli+'-'+Eqclid.FonCli) as Fone,
    Sum(TotPedido) as TotCompa
    from Pedidos
    Inner join Eqclid on Pedidos.CodCliente=Eqclid.CodCli
    inner join Cidades on Eqclid.CodCid=Cidades.CodCid
    inner join Eqvend on Pedidos.CodVen=EqVend.CodVen
    where SitCli=0 and (TravaCli=' ' or TravaCli is null)
    and (restricao=' ' or restricao is null)and Cancelado is null
    and EstCid like '%'
    and DataPedido in (Select max(DataPedido) from Pedidos group by CodCliente)
    Group by CodCliente
    having DateDiff(day,Max(DataPedido),getdate()) >=60
    Order by cliente desc

    segunda-feira, 15 de outubro de 2012 20:23
  • certo mas como coloco o nome do vendedor ai ? se eu utilizar o min ele traz o menor se eu utilizar o max ele traz o codigo do vendedor maior..

    assim estaria correto? ele me trouxe resultado so preciso conferir...

    Select (CodCliente) as Cliente,max(DataPedido) as DataUltPed,
       DateDiff(day,max(DataPedido),getdate()) as Dias,min(Cidades.NomCid) as Cidade,
    Min(EqClid.NomCli) as NomeCliente,min(Eqclid.DDDCli+'-'+Eqclid.FonCli) as Fone,
    Sum(TotPedido) as TotCompa,min(Pedidos.CodVen) as Vendedor
    from Pedidos
    Inner join Eqclid on Pedidos.CodCliente=Eqclid.CodCli
    inner join Cidades on Eqclid.CodCid=Cidades.CodCid
    inner join Eqvend on Pedidos.CodVen=EqVend.CodVen
    where SitCli=0 and (TravaCli=' ' or TravaCli is null)
    and (restricao=' ' or restricao is null)and Cancelado is null
    and EstCid like '%'
    and DataPedido in (Select max(DataPedido) from Pedidos group by CodCliente)
    Group by CodCliente
    having DateDiff(day,Max(DataPedido),getdate()) >=60
    Order by cliente desc

    Obrigado


    • Editado Decio Morais segunda-feira, 15 de outubro de 2012 20:38 Adicionar codigo
    segunda-feira, 15 de outubro de 2012 20:37
  • realmente ele trouxe o pedido com o vendedor de menor numero.........
    segunda-feira, 15 de outubro de 2012 20:45
  • Boa noite,

    Não sei ao certo a qual tabela pertencem algumas colunas, mas experimente mais ou menos desta forma:

    with CTE as
    (
        select CodCliente, Max(DataPedido) as DataUltPed, Sum(TotPedido) as TotCompa
        from Pedidos
        group by CodCliente
        having DateDiff(day, Max(DataPedido), getdate()) >= 60
    )
    
    
    Select 
        CTE.CodCliente as Cliente,
        CTE.DataUltPed, 
        DateDiff(day, CTE.DataUltPed, getdate()) as Dias,
        Cidades.NomCid as Cidade,
        EqClid.NomCli as NomeCliente,
        Eqclid.DDDCli + '-' + Eqclid.FonCli as Fone,
        Pedidos.CodVen,
        Eqvend.NomeVen,
        CTE.TotCompa
    from CTE
    inner join Pedidos on Pedidos.CodCliente = CTE.CodCliente and Pedidos.DataPedido = CTE.DataUltPed
    Inner join Eqclid on Pedidos.CodCliente = Eqclid.CodCli
    inner join Cidades on Eqclid.CodCid = Cidades.CodCid
    inner join Eqvend on Pedidos.CodVen = EqVend.CodVen
    where SitCli=0 and (TravaCli=' ' or TravaCli is null)
    and (restricao=' ' or restricao is null) and Cancelado is null
    Order by cliente desc
    

    Espero que ajude.


    Assinatura: http://www.imoveisemexposicao.com.br

    segunda-feira, 15 de outubro de 2012 23:09
  • Muito Obrigado pela ajuda Gapimex , mas infelismente ele esta repetindo pedido ....

    a terceira e a quarta linha .

    select

    terça-feira, 16 de outubro de 2012 11:11
  • Olá Décio, vai ser preciso que você faça um JOIN com a tabela Vendedor pra trazer os vendedores. Acredito também que exista uma associação entre as tabelas pedidos com vendedores tipo VENDEDOR_PEDIDOS com campo data emissão do pedido. Ressalto que estou fazendo apenas uma analogia das descrições das tabelas existentes na modelagem de seu Banco normalizado, pois não sei como as mesmas estão nomeadas. Uma outra sugestão no aspecto desempenho de consulta é se você puder evite no máximo o uso de operadores como "OR" comando "IS NULL" e "LIKE", pois normalmente eles consome muita CPU ao realizar o processamento lógico. Verifique também se no lugar do GROUP BY usar o comando DISTINCT não melhora  o desempenho da consulta.

    Nos dê um retorno dos resultados!

    Se esta sugestão for útil, por favor, classifique-a como útil.
    Se ela lhe ajudar a resolver o problema, por favor, marque-a como Resposta.

    terça-feira, 16 de outubro de 2012 13:16
  • Ola ja contem o join na Select é que o nome das tabelas sao estranhos  vamos La
    Eqclid  = clientes
    Eqvvend=Vendedor

    vlw

    terça-feira, 16 de outubro de 2012 13:24
  • Supondo que uma coluna chamada IdPedido seja a PK da tabela Pedidos, e que MAX(IdPedido) retorne o Id do último pedido, experimente desta forma:

    with CTE as
    (
        select CodCliente, Max(DataPedido) as DataUltPed, Sum(TotPedido) as TotCompa, Max(IdPedido) as IdUltPed
        from Pedidos
        group by CodCliente
        having DateDiff(day, Max(DataPedido), getdate()) >= 60
    )
    
    Select 
        CTE.CodCliente as Cliente,
        CTE.DataUltPed, 
        DateDiff(day, CTE.DataUltPed, getdate()) as Dias,
        Cidades.NomCid as Cidade,
        EqClid.NomCli as NomeCliente,
        Eqclid.DDDCli + '-' + Eqclid.FonCli as Fone,
        Pedidos.CodVen,
        Eqvend.NomeVen,
        CTE.TotCompa
    from CTE
    inner join Pedidos on Pedidos.CodCliente = CTE.CodCliente and Pedidos.IdPedido = CTE.IdUltPed
    Inner join Eqclid on Pedidos.CodCliente = Eqclid.CodCli
    inner join Cidades on Eqclid.CodCid = Cidades.CodCid
    inner join Eqvend on Pedidos.CodVen = EqVend.CodVen
    where SitCli=0 and (TravaCli=' ' or TravaCli is null)
    and (restricao=' ' or restricao is null) and Cancelado is null
    Order by cliente desc
    Espero que ajude.


    Assinatura: http://www.imoveisemexposicao.com.br

    • Marcado como Resposta Decio Morais terça-feira, 16 de outubro de 2012 14:20
    terça-feira, 16 de outubro de 2012 13:28
  • Muito Obrigado gapimex eu testei ak e axu que seria isso mesmo cara.

    Gostaria que desse uma breve explicacao sobre a solucao porque nunc autilizei assim cara, apenas o arroz e feijao mesmo

    select, group e aonde posso encontrar material sobre isso.

    se possivel me add ai no msn ou skype.

    skype decioneto2000

    msn decioneto2000@hotmail.com

    muito obrigado ja fazia 3 dias batidos nela e naum conseguia resolver.

    vlw

    terça-feira, 16 de outubro de 2012 14:23
  • Antes de mais nada, não percebi na hora, mas acho que pode ser utilizada somente a PK no Join da CTE com a tabela Pedidos:

    inner join Pedidos on Pedidos.IdPedido = CTE.IdUltPed

    Sobre a solução, acho que de diferente só foi utilizada a CTE:

    http://msdn.microsoft.com/en-us/library/ms190766.aspx

    Sobre Skype ou MSN, não fico conectado, mas se ficar alguma dúvida é só postar.

    Abraço


    Assinatura: http://www.imoveisemexposicao.com.br

    terça-feira, 16 de outubro de 2012 17:50