none
Selecionar primeiro registro. RRS feed

  • Pergunta

  • Olá pessoal.

    Como eu faço para selecionar o primeiro registro de um determinado cliente realizado por um determinado usuário?

    A situação é seguinte temos um setor de Televendas dentro da empresa e queremos saber quantas recuperações de clientes elas fizeram dentro de um determinado período.

    Esse cliente poder ter pedidos com outros vendedores externos ou não, porém quero somente contar o primeiro pedido feito pelo pessoal do televendas pois esse primeiro pedido é a recuperação desse cliente.

    Obrigado.

    sexta-feira, 4 de abril de 2014 13:50

Respostas

Todas as Respostas

  • Tem alguma flag no pedido que fala que esse Pedido foi feito no televendas, ou então, o usuário que criou esse pedido ele possui algum flag que diz que ele é do televenda ?

    Existem n possibilidades mas, isso deve estar contido em alguma tabela ? tem alguma tabela que pode ser lida para buscar essa informação ?


    Fulvio Cezar Canducci Dias

    sexta-feira, 4 de abril de 2014 15:48
  • Primeiramente obrigado pela resposta.

    Existe somente o código do vendedor para realizar o filtro.

    Consigo utilizar a cláusula TOP para pegar o primeiro registro de um vendedor porém, como faria para pega o primeiro registro de todas os vendedores ao mesmo tempo para fazer uma contagem?

    E a outra questão é o período, por exemplo: a primeira venda para um cliente foi realizada no mês de Janeiro e eu quero o período referente ao mês de Fevereiro, essa primeira venda de Janeiro não deverá aparecer pois não é uma recuperação do mês de Fevereiro.

    Espero que tenha explicado melhor o meu problema.

    Mais uma vez obrigado.

    sexta-feira, 4 de abril de 2014 17:29
  • Boa tarde,

    Cleber, confira um exemplo de query com uso da função Row_number no tópico abaixo:

    http://social.msdn.microsoft.com/Forums/sqlserver/pt-BR/fa5a4ed5-3c72-4c3f-b735-b7a2b4865047/select-meio-louco?forum=520

    Espero que ajude.


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

    sexta-feira, 4 de abril de 2014 18:56
  • Boa Tarde Kleber,

    Como você já disse você pode usar a clausula TOP para pegar o primeiro registro, ou, caso seu SQL seja a versão SERVER 2012 ou posterior você pode usar a Cláusula OFFSET-FETCH para realizar essa tarefa.

    É um pouco difícil definir um método correto pois seria necessário ver como estão essas tabelas para propor algo mais preciso.

    Você mencionou que deseja apenas as vendas de um determinado mês. Existe algum campo no seu banco de dados que armazena a data da venda? Se existir você pode filtrar pelo mês para pegar essa informação.


    Giovani Cruzara – Microsoft Contingent Staff

    Esse conteúdo é fornecido sem garantias de qualquer tipo, seja expressa ou implícita.

    Msdn Community Support

    Por favor, lembre-se de “Marcar como Resposta” as respostas que resolveram o seu problema. Essa é uma maneira comum de reconhecer aqueles que o ajudaram e fazer com que seja mais fácil para os outros visitantes encontrarem a resolução mais tarde.

    sexta-feira, 4 de abril de 2014 19:05
  • Primeiramente obrigado pela resposta.

    Existe somente o código do vendedor para realizar o filtro.

    Consigo utilizar a cláusula TOP para pegar o primeiro registro de um vendedor porém, como faria para pega o primeiro registro de todas os vendedores ao mesmo tempo para fazer uma contagem?

    E a outra questão é o período, por exemplo: a primeira venda para um cliente foi realizada no mês de Janeiro e eu quero o período referente ao mês de Fevereiro, essa primeira venda de Janeiro não deverá aparecer pois não é uma recuperação do mês de Fevereiro.

    Espero que tenha explicado melhor o meu problema.

    Mais uma vez obrigado.

    Seria legal você passar as tabelas (CREATE TABLE), porque, eu não consigo ajudar sem ver a tabela e os campos ... peço mil desculpas já deveria ter dito isso no primeiro post acabei esquecendo ... e alguns dados de exemplo ... porque vai depender e pode ser resolvido dependendo da versão do banco de várias formas?

    Fulvio Cezar Canducci Dias

    sexta-feira, 4 de abril de 2014 20:03
  • Esta é a tabela:CREATE TABLE [dbo].[Pedido](
        [co_pedido] [int] NOT NULL,
        [co_estoque] [int] NULL,
        [co_endentrega] [int] NOT NULL,
        [co_midia] [int] NULL,
        [co_moeda] [int] NOT NULL,
        [co_seq] [int] NOT NULL,
        [co_statped] [int] NOT NULL,
        [co_transp] [int] NOT NULL,
        [co_respped] [int] NOT NULL,
        [co_cliente] [int] NOT NULL,
        [co_loja] [int] NOT NULL,
        [co_cfo] [int] NOT NULL,
        [co_contato] [int] NOT NULL,
        [co_usr] [int] NOT NULL,
        [co_revenda] [int] NULL,
        [co_respven] [int] NULL,
        [co_pag] [int] NOT NULL,
        [co_banco] [int] NULL,
        [co_clientebanco] [int] NULL,
        [co_origem_pedido] [int] NULL,
        [va_cotacao] [numeric](18, 6) NOT NULL,
        [dt_pedido] [datetime] NULL,
        [dt_entrega] [datetime] NULL,
        [dt_vencimento] [datetime] NULL,
        [nu_pedcli] [varchar](12) NULL,
        [nu_totalitens] [int] NULL,
        [pc_taxa] [numeric](10, 6) NULL,
        [va_taxa] [numeric](18, 6) NOT NULL,
        [va_taxarevenda] [numeric](18, 6) NOT NULL,
        [pc_cofins] [numeric](10, 6) NULL,
        [va_cofins] [numeric](18, 6) NOT NULL,
        [va_cofinsrevenda] [numeric](18, 6) NOT NULL,
        [pc_ir] [numeric](10, 6) NULL,
        [va_ir] [numeric](18, 6) NOT NULL,
        [va_irrevenda] [numeric](18, 6) NOT NULL,
        [pc_pis] [numeric](10, 6) NULL,
        [va_pis] [numeric](18, 6) NOT NULL,
        [va_pisrevenda] [numeric](18, 6) NOT NULL,
        [pc_iss] [numeric](10, 6) NULL,
        [va_iss] [numeric](18, 6) NOT NULL,
        [va_issrevenda] [numeric](18, 6) NOT NULL,
        [va_peso] [numeric](18, 6) NOT NULL,
        [va_frete] [numeric](18, 6) NOT NULL,
        [va_comissaoliquida] [numeric](18, 6) NOT NULL,
        [va_pedido] [numeric](18, 6) NULL,
        [va_pedrevenda] [numeric](18, 6) NOT NULL,
        [pc_desconto] [numeric](10, 6) NULL,
        [va_desconto] [numeric](18, 6) NOT NULL,
        [va_notafiscal] [numeric](18, 6) NOT NULL,
        [va_nfrevenda] [numeric](18, 6) NOT NULL,
        [va_icms] [numeric](18, 6) NOT NULL,
        [va_icmsrevenda] [numeric](18, 6) NOT NULL,
        [va_ipi] [numeric](18, 6) NOT NULL,
        [va_ipirevenda] [numeric](18, 6) NOT NULL,
        [va_referencia] [numeric](18, 6) NOT NULL,
        [va_margemref] [numeric](18, 6) NOT NULL,
        [pc_margemref] [numeric](18, 6) NOT NULL,
        [tx_obs] [varchar](255) NULL,
        [tx_confi] [varchar](100) NULL,
        [tx_embexp] [varchar](100) NULL,
        [tx_fatcar] [varchar](100) NULL,
        [tx_centroconfiguracao] [varchar](255) NULL,
        [tx_outrasobs] [varchar](255) NULL,
        [tx_instrucaoentrega] [text] NULL,
        [in_usoconsumo] [varchar](5) NOT NULL,
        [in_frete] [varchar](5) NOT NULL,
        [in_parcial] [varchar](5) NOT NULL,
        [in_fixo] [varchar](5) NOT NULL,
        [in_aereo] [varchar](5) NOT NULL,
        [in_disponibilidade] [varchar](1) NULL,
        [in_credito] [varchar](5) NOT NULL,
        [in_etiq] [varchar](5) NULL,
        [dt_separacao] [datetime] NULL,
        [co_separador] [int] NULL,
        [dt_iniintegracao] [datetime] NULL,
        [dt_fimintegracao] [datetime] NULL,
        [co_integrador] [int] NULL,
        [va_avista] [numeric](18, 6) NOT NULL,
        [dt_atual] [datetime] NULL,
        [tx_statant] [varchar](30) NULL,
        [co_statant] [int] NULL,
        [nu_volume] [int] NULL,
        [in_forcaestoque] [varchar](5) NOT NULL,
        [va_cotacaonf] [numeric](18, 6) NOT NULL,
        [dt_ultalteracao] [datetime] NOT NULL,
        [va_notacorrigido] [numeric](18, 6) NOT NULL,
        [dt_venc_orig] [datetime] NULL,
        [in_especial] [varchar](5) NOT NULL,
        [in_estrategico] [varchar](5) NOT NULL,
        [co_timestamp] [timestamp] NULL,
        [in_separa] [varchar](5) NOT NULL,
        [in_liberadofat] [varchar](5) NOT NULL,
        [va_margemrefliq] [numeric](18, 6) NOT NULL,
        [pc_margemrefliq] [numeric](10, 6) NULL,
        [va_manuseio] [numeric](18, 6) NULL,
        [in_romasepa] [varchar](5) NOT NULL,
        [nu_pednet] [int] NULL,
        [pc_recfrete] [numeric](10, 6) NULL,
        [va_recfrete] [numeric](18, 6) NULL,
        [va_freteoriginal] [numeric](18, 6) NULL,
        [va_margemliqoriginal] [numeric](18, 6) NULL,
        [pc_cpmf] [numeric](10, 6) NULL,
        [va_cpmf] [numeric](18, 6) NULL,
        [va_cpmfrevenda] [numeric](18, 6) NULL,
        [va_freteicms] [numeric](18, 6) NULL,
        [va_volume] [numeric](18, 6) NULL,
        [co_tabpre] [int] NULL,
        [in_voltaestoque] [varchar](5) NOT NULL,
        [in_vencimentofixo] [varchar](5) NULL,
        [dt_ultatualiza] [datetime] NULL,
        [in_terceiros] [varchar](5) NOT NULL,
        [co_cfoservico] [int] NULL,
        [in_checacondpagto] [varchar](5) NULL,
        [NR_PEDIDO] [int] NULL,
        [PC_DESCTABPRE] [numeric](18, 6) NOT NULL,
        [PC_DESC1] [numeric](18, 6) NOT NULL,
        [PC_DESC2] [numeric](18, 6) NOT NULL,
        [dt_timestamp] [datetime] NULL,
        [nu_chave_sfa] [varchar](30) NULL,
        [co_clientetriangular] [int] NULL,
        [CO_TRANSPREDESPACHO] [int] NULL,
        [PC_DESCINFORMADO] [varchar](50) NULL,
        [DT_ATEND_INI] [datetime] NULL,
        [DT_ATEND_FIN] [datetime] NULL,
        [CO_FLAGERP] [int] NULL,
        [CO_MOTIVO] [int] NULL,
        [CO_CANALVENDA] [int] NULL,
        [CO_TRANSPREDESP] [int] NULL,
        [CO_USR_IMPLANTACAO] [int] NULL,
        [pc_desc_informado] [varchar](50) NOT NULL,
        [CO_REPRES] [int] NULL,
        [pc_rentabilidade] [numeric](18, 6) NULL,
        [va_margemcontrib] [numeric](18, 6) NULL,
        [dt_proposta] [datetime] NULL,

     CONSTRAINT [PK__Pedido__265C5597] PRIMARY KEY NONCLUSTERED
    (
        [co_pedido] ASC
    )WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON, FILLFACTOR = 90) ON [PRIMARY]
    ) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]

    segunda-feira, 7 de abril de 2014 11:27
  • Basicamente serão essas colunas que usarei.

    Co_Cli	Co_pedido   Co_repres	Dt_Pedido
    499	22924	        488 	2012-06-08 00:00:00.000
    499	488.291257	488	2012-06-08 00:00:00.000
    499	488.308325	488	2012-08-28 00:00:00.000
    504	488.360887	488	2013-04-19 00:00:00.000
    504	488.419282	488	2013-12-12 00:00:00.000
    546	488.357242	488	2013-04-02 00:00:00.000
    546	488.372448	488	2013-06-05 00:00:00.000
    546	488.384929	488	2013-07-30 00:00:00.000
    546	488.404480	488	2013-10-15 00:00:00.000
    546	488.414450	488	2013-11-27 00:00:00.000
    546	488.425420	488	2014-01-24 00:00:00.000
    578	488.263203	488	2012-01-09 00:00:00.000
    578	488.268324	488	2012-02-04 00:00:00.000
    578	488.276717	488	2012-03-26 00:00:00.000
    578	488.283768	488	2012-05-02 00:00:00.000
    588	488.256676	488	2011-12-01 00:00:00.000
    

    Nesse caso peguei somente de um vendedor - 488.

    Quero fazer uma contagem que pegue somente o primeiro pedido de cada cliente, que será considerado uma recuperação de cliente.

    Neste caso no Mês 06/2012 teve 1 recuperação
                                   01/2012 teve 1 recuperação
                                   04/2013 teve 2 recuperações.

    Acredito quer agora tenha esclarecido melhor o que eu preciso.

    A versão do SQL é o 2008.

    Desde já obrigado.

    segunda-feira, 7 de abril de 2014 11:46
  • Experimente mais ou menos dessa forma:

    with CTE_RN as
    (
        select
            Co_Cli,
            Co_pedido,
            Co_repres,
            Dt_Pedido,
            ROW_NUMBER() OVER(PARTITION BY Co_Cli ORDER BY Dt_Pedido) as RN
        from Pedido
    )
    
    select * from CTE_RN
    where RN = 1

    Espero que ajude.


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

    • Marcado como Resposta Cleber Emydio segunda-feira, 7 de abril de 2014 17:43
    segunda-feira, 7 de abril de 2014 13:12
  • Basicamente serão essas colunas que usarei.

    Co_Cli	Co_pedido   Co_repres	Dt_Pedido
    499	22924	        488 	2012-06-08 00:00:00.000
    499	488.291257	488	2012-06-08 00:00:00.000
    499	488.308325	488	2012-08-28 00:00:00.000
    504	488.360887	488	2013-04-19 00:00:00.000
    504	488.419282	488	2013-12-12 00:00:00.000
    546	488.357242	488	2013-04-02 00:00:00.000
    546	488.372448	488	2013-06-05 00:00:00.000
    546	488.384929	488	2013-07-30 00:00:00.000
    546	488.404480	488	2013-10-15 00:00:00.000
    546	488.414450	488	2013-11-27 00:00:00.000
    546	488.425420	488	2014-01-24 00:00:00.000
    578	488.263203	488	2012-01-09 00:00:00.000
    578	488.268324	488	2012-02-04 00:00:00.000
    578	488.276717	488	2012-03-26 00:00:00.000
    578	488.283768	488	2012-05-02 00:00:00.000
    588	488.256676	488	2011-12-01 00:00:00.000

    Nesse caso peguei somente de um vendedor - 488.

    Quero fazer uma contagem que pegue somente o primeiro pedido de cada cliente, que será considerado uma recuperação de cliente.

    Neste caso no Mês 06/2012 teve 1 recuperação
                                   01/2012 teve 1 recuperação
                                   04/2013 teve 2 recuperações.

    Acredito quer agora tenha esclarecido melhor o que eu preciso.

    A versão do SQL é o 2008.

    Desde já obrigado.

    Então !!!

    Eu entendi assim: (tavez errado)

     o cliente 499 teve ocorrências em 2012 nos meses de 06 e 08 então é para sair esses dois ???  sendo que o mes 06 teve duas ocorrencias (pegar sempre a primeira pela menor pedido) e o mês 08 teve 1 ocorrência !!! ???


    Fulvio Cezar Canducci Dias

    segunda-feira, 7 de abril de 2014 14:10
  • Na verdade é o seguinte...

    Para cada cliente eu devo contar somente um registro e sempre o primeiro registro.

    Como nos casos acima os clientes tiveram vários pedidos porém só devo contar 1 pedido por cliente e tem que ser sempre o primeiro.

    Por exemplo o 499 teve o primeiro pedido no mês 06/12 a pessoa que emitir um relatório desses e tirar do mês 06/12 deverá contar o primeiro pedido do 499, se o relatório for emitido do mês 07/12 para frente não deverá ser contado nenhum pedido do cliente 499 porque o primeiro pedido dele foi no mês 06/12, mesmo ele tendo pedido no mês 08/12.

    Por que pra  esse relatório só importa o 1º pedido de cada cliente.

    desde já muito Obrigado.

    segunda-feira, 7 de abril de 2014 16:44
  • Ok pessoal...

    O Gapimex resolveu o meu problema.

    Era exatamente isso que eu queria obrigado.

    segunda-feira, 7 de abril de 2014 17:45