Fórum Contar Dados que Aparecem em Sequencia #594378
22/05/2018
0
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
+ 0Post mais votado
23/05/2018
( 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
Gostei + 3
Mais Posts
23/05/2018
Emerson Nascimento
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'
Gostei + 3
23/05/2018
Leonardo Silva
Abraço.
Gostei + 0
23/05/2018
Leonardo Silva
Abraço.
Gostei + 0
25/05/2018
Diego Medeiros
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)