Usuário com melhor resposta
Selecionar primeiro registro.

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.
Respostas
-
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
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 ?
-
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.
-
Boa tarde,
Cleber, confira um exemplo de query com uso da função Row_number no tópico abaixo:
Assinatura: http://www.imoveisemexposicao.com.br
-
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. -
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.
-
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] -
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.
-
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
-
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 !!! ???
-
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.
-