Contar Dados que Aparecem em Sequencia
22/05/2018
0
Prezados,
Boa noite
Estou com um problema para inserir um contador apenas quando um dado repetir em sequencia.
Conforme a imagem abaixo, o ID_ACAO 2 aparece pela primeira vez e o contador marca 1. Ao aparecer pela segunda vez, o contador recomeça a contar do 1 em diante e quando aparece pela terceira vez, também recomeça a contar. Isso deve ocorrer para todos os ID_ACAO.
Tentei usar ROW_NUMBER, DENSE_RANK, tentei verificar a linha anterior, linha posterior, mas não consegui montar um select para trazer o resultado abaixo.
Podem ajudar por gentileza?
TELEFONE DATA ID_ACAO CONTADOR
11996855200 01/01/2018 1 1
11996855200 02/01/2018 1 2
11996855200 03/01/2018 2 1 <- 1ª vez que o ID_ACAO 2 aparece
11996855200 04/01/2018 4 1
11996855200 05/01/2018 3 1
11996855200 06/01/2018 2 1 <- 2ª vez que o ID_ACAO 2 aparece
11996855200 07/01/2018 2 2
11996855200 08/01/2018 2 3
11996855200 09/01/2018 2 4
11996855200 10/01/2018 3 1
11996855200 11/01/2018 2 1
11996855200 12/01/2018 3 1
11996855200 13/01/2018 2 1 <- 3ª vez que o ID_ACAO 2 aparece
11996855200 14/01/2018 2 2
11996855202 01/01/2018 1 1
11996855202 02/01/2018 1 2
11996855202 03/01/2018 2 1
11996855202 04/01/2018 4 1
11996855202 05/01/2018 3 1
11996855202 06/01/2018 2 1
11996855202 07/01/2018 2 2
11996855202 08/01/2018 2 3
11996855202 09/01/2018 2 4
11996855202 10/01/2018 3 1
11996855202 11/01/2018 2 1
11996855202 12/01/2018 3 1
11996855202 13/01/2018 2 1
11996855202 14/01/2018 2 2
Boa noite
Estou com um problema para inserir um contador apenas quando um dado repetir em sequencia.
Conforme a imagem abaixo, o ID_ACAO 2 aparece pela primeira vez e o contador marca 1. Ao aparecer pela segunda vez, o contador recomeça a contar do 1 em diante e quando aparece pela terceira vez, também recomeça a contar. Isso deve ocorrer para todos os ID_ACAO.
Tentei usar ROW_NUMBER, DENSE_RANK, tentei verificar a linha anterior, linha posterior, mas não consegui montar um select para trazer o resultado abaixo.
Podem ajudar por gentileza?
TELEFONE DATA ID_ACAO CONTADOR
11996855200 01/01/2018 1 1
11996855200 02/01/2018 1 2
11996855200 03/01/2018 2 1 <- 1ª vez que o ID_ACAO 2 aparece
11996855200 04/01/2018 4 1
11996855200 05/01/2018 3 1
11996855200 06/01/2018 2 1 <- 2ª vez que o ID_ACAO 2 aparece
11996855200 07/01/2018 2 2
11996855200 08/01/2018 2 3
11996855200 09/01/2018 2 4
11996855200 10/01/2018 3 1
11996855200 11/01/2018 2 1
11996855200 12/01/2018 3 1
11996855200 13/01/2018 2 1 <- 3ª vez que o ID_ACAO 2 aparece
11996855200 14/01/2018 2 2
11996855202 01/01/2018 1 1
11996855202 02/01/2018 1 2
11996855202 03/01/2018 2 1
11996855202 04/01/2018 4 1
11996855202 05/01/2018 3 1
11996855202 06/01/2018 2 1
11996855202 07/01/2018 2 2
11996855202 08/01/2018 2 3
11996855202 09/01/2018 2 4
11996855202 10/01/2018 3 1
11996855202 11/01/2018 2 1
11996855202 12/01/2018 3 1
11996855202 13/01/2018 2 1
11996855202 14/01/2018 2 2
Leonardo Silva
Curtir tópico
+ 0
Responder
Post mais votado
23/05/2018
Fala Leonardo, pra isso vc pode usar o "case when"
( https://www.devmedia.com.br/trabalhando-com-expressoes-case-e-a-funcao-iif-no-t-sql/31292 )
caso o ID_ACAO igual a 2, vc pode usar um contador.
Bons estudos!
( https://www.devmedia.com.br/trabalhando-com-expressoes-case-e-a-funcao-iif-no-t-sql/31292 )
caso o ID_ACAO igual a 2, vc pode usar um contador.
Bons estudos!
Diego Medeiros
Responder
Mais Posts
23/05/2018
Emerson Nascimento
tente resolver com uma função. segue um exemplo:
sintaxe:
ou
SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE FUNCTION TRBTESTE() RETURNS @TRB TABLE ( TELEFONE VARCHAR(15), DATA DATE, ID_ACAO INT, CONTADOR INT ) AS BEGIN DECLARE @TELEFONE VARCHAR(15) DECLARE @TEL VARCHAR(15) DECLARE @DATA DATE DECLARE @ID_ACAO INT DECLARE @ACAO INT DECLARE @CONT INT DECLARE Listagem CURSOR LOCAL FOR SELECT TELEFONE, DATA, ID_ACAO FROM TARIFA T1 ORDER BY TELEFONE, DATA, ID_ACAO OPEN Listagem FETCH NEXT FROM Listagem INTO @TELEFONE, @DATA, @ID_ACAO SET @CONT = 0 WHILE (@@FETCH_STATUS=0) BEGIN SET @CONT = @CONT + 1 SET @ACAO = @ID_ACAO SET @TEL = @TELEFONE INSERT INTO @TRB VALUES (@TELEFONE, @DATA, @ID_ACAO, @CONT) FETCH NEXT FROM Listagem INTO @TELEFONE, @DATA, @ID_ACAO IF (@ID_ACAO <> @ACAO) OR (@TEL <> @TELEFONE) SET @CONT = 0 END CLOSE Listagem DEALLOCATE Listagem RETURN END GO
sintaxe:
SELECT * FROM TRBTESTE()
ou
SELECT * FROM TRBTESTE() WHERE DATA BETWEEN '01/01/2018' AND '10/01/2018' AND TELEFONE = '11996855200'
Responder
23/05/2018
Leonardo Silva
Emerson, muito obrigado. Resolveu meu problema.<br />
Abraço.
Abraço.
Responder
Clique aqui para fazer login e interagir na Comunidade :)