none
Inner Join RRS feed

  • Pergunta

  • Oi pessoal,

    Alguém pode dar uma ajuda?

    Eu tenho uma consulta que tras o resultado:


    AP	dtt_data_captura	dtt_data
    04AP	8/9/2017	8/13/2017
    04AP	8/9/2017	8/13/2017
    04AP	8/9/2017	8/13/2017
    04AP	8/9/2017	8/13/2017
    04AP	8/9/2017	8/14/2017
    04AP	8/9/2017	8/14/2017
    04AP	8/9/2017	8/15/2017
    04AP	8/9/2017	8/14/2017
    04AP	8/9/2017	8/14/2017
    04AP	8/9/2017	8/15/2017
    04AP	8/10/2017	8/14/2017
    04AP	8/10/2017	8/14/2017
    04AP	8/10/2017	8/15/2017
    04AP	8/10/2017	8/14/2017
    04AP	8/10/2017	8/14/2017
    04AP	8/10/2017	8/15/2017
    04AP	8/10/2017	8/16/2017
    04AP	8/10/2017	8/16/2017
    04AP	8/10/2017	8/16/2017
    

    Se analisarem bem, vão verificar que dentro do meu 04AP na data de captura de ontem e hojeTenho a terceira coluna

    que nos indica a data de pagamento

    Mas quero fazer uma combinação de modo que eu tenho na data de ontem e de hoje no mesmo 04AP a mesma data de pagamento

    Então preciso de um Inner Join de modo que exclua a primeira e a última data de pagamento, ficando assim:

     
    AP	dtt_data_captura	dtt_data
    04AP	8/9/2017	8/14/2017
    04AP	8/9/2017	8/14/2017
    04AP	8/9/2017	8/15/2017
    04AP	8/9/2017	8/14/2017
    04AP	8/9/2017	8/14/2017
    04AP	8/9/2017	8/15/2017
    04AP	8/10/2017	8/14/2017
    04AP	8/10/2017	8/14/2017
    04AP	8/10/2017	8/15/2017
    04AP	8/10/2017	8/14/2017
    04AP	8/10/2017	8/14/2017
    04AP	8/10/2017	8/15/2017
    

    Pois ontem e hoje tenho pagamentos q vencem nos mesmos dias 14 e 15

    Mas não tenho pagamentos dos dois dias que vencem 13 e 16, ou é somente a data de captura d eontem, ou somente a captura de hoje. Por isso quero excluir

    É possível?

    Obrigada 

    quinta-feira, 10 de agosto de 2017 18:22

Respostas

  • Experimente fazer uns testes deixando a parte final dessa forma:

    with CTE_Count as
    (
        select 
            AP.AP,
            D.dtt_data
        from #BaseFareValuesStats as D
        INNER JOIN @AP AP
            ON 
                AP.StartRange <= D.NDO AND
                AP.EndRange   >= D.NDO
        Where
            D.DowCapture <> 'Saturday' and 
            D.DowCapture <> 'Monday' and 
            D.DowCapture <> 'Sunday'
        group by
            AP.AP,
            D.dtt_data
        having
            count(distinct D.dtt_data_captura) > 1
    )
    
      SELECT D.[vch_empresa_editada], D.[vch_od], D.[Flt Type], D.[vch_numeros], D.[vch_mercado],
    		 D.flt_base_min, 
    		 AP.AP,
             D.[dtt_data_captura],
    		 D.[dtt_data],
    		 D.DowCapture
    
      FROM #BaseFareValuesStats D
      INNER JOIN @AP AP
          ON 
              AP.StartRange <= D.NDO AND
              AP.EndRange   >= D.NDO
    
      Where  
          D.DowCapture <> 'Saturday' and
          D.DowCapture <> 'Monday' and 
          D.DowCapture <> 'Sunday' and
          exists 
              (select 1 from CTE_Count as c 
               where c.AP = D.AP and c.dtt_data = D.dtt_data)
    
    ORDER BY D.[vch_od], D.[Flt Type], D.[dtt_data_captura],		 
    	     D.[vch_empresa_editada], 
    		 D.dtt_data, AP.AP	

    Espero que ajude


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

    • Marcado como Resposta Thaís Sakamoto terça-feira, 15 de agosto de 2017 15:14
    terça-feira, 15 de agosto de 2017 13:13

Todas as Respostas

  • Nos explique melhor sobre a estrutura das tabelas usadas na consulta.

    Se possível nos mande a query, para que possamos ter uma visão melhor do cenário.

    Assim fica mais fácil te ajudar.

    quinta-feira, 10 de agosto de 2017 22:22
  • Boa noite,

    Experimente fazer uns testes com o script abaixo:

    set dateformat mdy;
    
    declare @Tabela table (AP varchar(10), dtt_data_captura date, dtt_data date);
    
    insert into @Tabela values
    ('04AP', '8/9/2017', '8/13/2017'),
    ('04AP', '8/9/2017', '8/13/2017'),
    ('04AP', '8/9/2017', '8/13/2017'),
    ('04AP', '8/9/2017', '8/13/2017'),
    ('04AP', '8/9/2017', '8/14/2017'),
    ('04AP', '8/9/2017', '8/14/2017'),
    ('04AP', '8/9/2017', '8/15/2017'),
    ('04AP', '8/9/2017', '8/14/2017'),
    ('04AP', '8/9/2017', '8/14/2017'),
    ('04AP', '8/9/2017', '8/15/2017'),
    ('04AP', '8/10/2017', '8/14/2017'),
    ('04AP', '8/10/2017', '8/14/2017'),
    ('04AP', '8/10/2017', '8/15/2017'),
    ('04AP', '8/10/2017', '8/14/2017'),
    ('04AP', '8/10/2017', '8/14/2017'),
    ('04AP', '8/10/2017', '8/15/2017'),
    ('04AP', '8/10/2017', '8/16/2017'),
    ('04AP', '8/10/2017', '8/16/2017'),
    ('04AP', '8/10/2017', '8/16/2017');
    
    with CTE_Count as
    (
        select
            ap,
            dtt_data
        from @Tabela
        group by
            ap,
            dtt_data
        having
            count(distinct dtt_data_captura) > 1
    )
    
    select
        t.*
    from CTE_Count as c
    inner join @Tabela as t
        on 
            t.ap = c.ap and
            t.dtt_data = c.dtt_data
    order by
        ap,
        dtt_data_captura

    Espero que seja útil


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

    quinta-feira, 10 de agosto de 2017 23:28
  • Nos explique melhor sobre a estrutura das tabelas usadas na consulta.

    Se possível nos mande a query, para que possamos ter uma visão melhor do cenário.

    Assim fica mais fácil te ajudar.

      SELECT [empresa_editada], [od], [Flt Type], [vch_numeros], [vch_mercado],
    		 base_min, 
    		 AP.AP,
             [dtt_data_captura],
    		 [dtt_data],
    		 DowCapture
    
    
      FROM BaseFareValuesStats
    
    	  Where  DowCapture <> 'Saturday'
    	  and DowCapture <> 'Monday'
    	  and DowCapture <> 'Sunday'
    
    
    ORDER BY [od], [Flt Type], [dtt_data_captura],		 
    	     [empresa_editada], 
    		 dtt_data, AP.AP		 

    Resultado:


    sexta-feira, 11 de agosto de 2017 12:50
  • Boa noite,

    Experimente fazer uns testes com o script abaixo:

    set dateformat mdy;
    
    declare @Tabela table (AP varchar(10), dtt_data_captura date, dtt_data date);
    
    insert into @Tabela values
    ('04AP', '8/9/2017', '8/13/2017'),
    ('04AP', '8/9/2017', '8/13/2017'),
    ('04AP', '8/9/2017', '8/13/2017'),
    ('04AP', '8/9/2017', '8/13/2017'),
    ('04AP', '8/9/2017', '8/14/2017'),
    ('04AP', '8/9/2017', '8/14/2017'),
    ('04AP', '8/9/2017', '8/15/2017'),
    ('04AP', '8/9/2017', '8/14/2017'),
    ('04AP', '8/9/2017', '8/14/2017'),
    ('04AP', '8/9/2017', '8/15/2017'),
    ('04AP', '8/10/2017', '8/14/2017'),
    ('04AP', '8/10/2017', '8/14/2017'),
    ('04AP', '8/10/2017', '8/15/2017'),
    ('04AP', '8/10/2017', '8/14/2017'),
    ('04AP', '8/10/2017', '8/14/2017'),
    ('04AP', '8/10/2017', '8/15/2017'),
    ('04AP', '8/10/2017', '8/16/2017'),
    ('04AP', '8/10/2017', '8/16/2017'),
    ('04AP', '8/10/2017', '8/16/2017');
    
    with CTE_Count as
    (
        select
            ap,
            dtt_data
        from @Tabela
        group by
            ap,
            dtt_data
        having
            count(distinct dtt_data_captura) > 1
    )
    
    select
        t.*
    from CTE_Count as c
    inner join @Tabela as t
        on 
            t.ap = c.ap and
            t.dtt_data = c.dtt_data
    order by
        ap,
        dtt_data_captura

    Espero que seja útil


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

    Eu testei seu código e quero chegar neste resultado.

    Como posso colocar na miha query?

     SELECT [empresa_editada], [od], [Flt Type], [vch_numeros], [vch_mercado],
    		 base_min, 
    		 AP.AP,
             [dtt_data_captura],
    		 [dtt_data],
    		 DowCapture
    
    
      FROM BaseFareValuesStats
    
    	  Where  DowCapture <> 'Saturday'
    	  and DowCapture <> 'Monday'
    	  and DowCapture <> 'Sunday'
    
    
    ORDER BY [od], [Flt Type], [dtt_data_captura],		 
    	     [empresa_editada], 
    		 dtt_data, AP.AP		

    sexta-feira, 11 de agosto de 2017 12:58
  • Experimente dessa forma:

    with CTE_Count as
    (
        select
            ap,
            dtt_data
        from BaseFareValuesStats
        group by
            ap,
            dtt_data
        having
            count(distinct dtt_data_captura) > 1
    )
    
    SELECT t.[empresa_editada], t.[od], t.[Flt Type], t.[vch_numeros], t.[vch_mercado],
    		 t.base_min, 
    		 t.AP,
             t.[dtt_data_captura],
    		 t.[dtt_data],
    		 t.DowCapture
    
      FROM CTE_Count as c
      INNER JOIN BaseFareValuesStats as t
          ON
              t.ap = c.ap and
              t.dtt_data = c.dtt_data          
    
    	  Where  b.DowCapture <> 'Saturday'
    	  and b.DowCapture <> 'Monday'
    	  and b.DowCapture <> 'Sunday'
    
    ORDER BY [od], [Flt Type], [dtt_data_captura],		 
    	     [empresa_editada], 
    		 dtt_data, AP
    

    Ou também dessa forma:

    SELECT t.[empresa_editada], t.[od], t.[Flt Type], t.[vch_numeros], t.[vch_mercado],
    		 t.base_min, 
    		 t.AP,
             t.[dtt_data_captura],
    		 t.[dtt_data],
    		 t.DowCapture
    
      FROM BaseFareValuesStats as t
    
    	  Where  t.DowCapture <> 'Saturday'
    	  and t.DowCapture <> 'Monday'
    	  and t.DowCapture <> 'Sunday'
    	  and exists
    		(select 1 from BaseFareValuesStats as s
    		 where
    			s.ap = t.ap and
                            s.dtt_data = s.dtt_data and
                            s.dtt_data_captura <> t.dtt_data_captura and
    			s.DowCapture <> 'Saturday' and 
    			s.DowCapture <> 'Monday' and 
    			s.DowCapture <> 'Sunday')
    
    ORDER BY [od], [Flt Type], [dtt_data_captura],		 
    	     [empresa_editada], 
    		 dtt_data, AP.AP		

    Espero que ajude


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

    sexta-feira, 11 de agosto de 2017 13:36
  • Experimente deixar o Where da última query da seguinte forma:

    	  Where  D.DowCapture <> 'Saturday'
    	  and D.DowCapture <> 'Monday'
    	  and D.DowCapture <> 'Sunday'
    	  and exists
    		(select 1 from #BaseFareValuesStats as s
    		 where
    			s.NDO = D.NDO and
                            s.dtt_data = D.dtt_data and
                            s.dtt_data_captura <> D.dtt_data_captura and
    			s.DowCapture <> 'Saturday' and 
    			s.DowCapture <> 'Monday' and 
    			s.DowCapture <> 'Sunday')
    

    Espero que ajude


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

    sexta-feira, 11 de agosto de 2017 19:20
  • Experimente deixar o Where da última query da seguinte forma:

    	  Where  D.DowCapture <> 'Saturday'
    	  and D.DowCapture <> 'Monday'
    	  and D.DowCapture <> 'Sunday'
    	  and exists
    		(select 1 from #BaseFareValuesStats as s
    		 where
    			s.NDO = D.NDO and
                            s.dtt_data = D.dtt_data and
                            s.dtt_data_captura <> D.dtt_data_captura and
    			s.DowCapture <> 'Saturday' and 
    			s.DowCapture <> 'Monday' and 
    			s.DowCapture <> 'Sunday')

    Espero que ajude


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

    Bom diaaaa

    Ainda ão deu certo, eu não excluo ainda o primeira e o último dtt_data

    Ou seja o que é diferente da dtt_data_captura

    segunda-feira, 14 de agosto de 2017 12:23
  • Bom dia,

    A query retornou linhas com dtt_data igual a 31/07/2017 e dtt_data_captura diferente de 27/07/2017?

    Ou linhas com dtt_data igual a 03/08/2017 e dtt_data_captura diferente de 28/07/2017?


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

    segunda-feira, 14 de agosto de 2017 12:49
  • Bom dia,

    A query retornou linhas com dtt_data igual a 31/07/2017 e dtt_data_captura diferente de 27/07/2017?

    Ou linhas com dtt_data igual a 03/08/2017 e dtt_data_captura diferente de 28/07/2017?


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

    Retornou  linhas com dtt_data igual a 03/08/2017 e dtt_data_captura diferente de 28/07/2017

    E se eu não tiver na dtt_data_captura dados com a mesma dtt_data eu quero excluir. 

    segunda-feira, 14 de agosto de 2017 13:55

  • Retornou  linhas com dtt_data igual a 03/08/2017 e dtt_data_captura diferente de 28/07/2017

    E se eu não tiver na dtt_data_captura dados com a mesma dtt_data eu quero excluir. 

    Não consegui entender... se tem mais de uma dtt_data_captura para o dia, como no caso do dia 03/08/2017, esse dia deve constar no resultado, certo?


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

    segunda-feira, 14 de agosto de 2017 14:27

  • Retornou  linhas com dtt_data igual a 03/08/2017 e dtt_data_captura diferente de 28/07/2017

    E se eu não tiver na dtt_data_captura dados com a mesma dtt_data eu quero excluir. 

    Não consegui entender... se tem mais de uma dtt_data_captura para o dia, como no caso do dia 03/08/2017, esse dia deve constar no resultado, certo?


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

    A data de captura é dia 28/07 e um dia antes 27/07.

    A dtt_data é a data da venda. 

    Assim para as datas de capturas 28/07 e 27/07 devem aparecer somente aqueles resultados que os dois dias possuem a mesma data de venda dtt_data

    No resultado o campo dtt_data diz que dia da captura 27/07 tem venda no dia 31/07 mas não tem no dia de captura do 28/07, então devo excluir

    Assim como  dia da captura 28/07 tem venda no dia 03/08 mas não tem no dia de captura do 27/07, então devo excluir

    Somente ficando com os dias que tenho venda na mesma data dtt_data

    segunda-feira, 14 de agosto de 2017 14:45
  • Acho que seria o caso de fazer uns testes com a primeira sugestão que postei com a CTE e o Having.

    Tente adapta-la na sua query ou poste ela novamente.


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

    segunda-feira, 14 de agosto de 2017 15:02
  • Experimente fazer uns testes deixando a parte final (abaixo de --Resultado final) da seguinte forma:

    with CTE_Count as
    (
        select 
            NDO,
            dtt_data
        from #BaseFareValuesStats
        Where
            DowCapture <> 'Saturday' and 
            DowCapture <> 'Monday' and 
            DowCapture <> 'Sunday'
        group by
            NDO,
            dtt_data
        having
            count(distinct dtt_data_captura) > 1
    )
    
    
      SELECT D.[vch_empresa_editada], D.[vch_od], D.[Flt Type], D.[vch_numeros], D.[vch_mercado],
    		 D.flt_base_min, 
    		 AP.AP,
             D.[dtt_data_captura],
    		 D.[dtt_data],
    		 D.DowCapture
    
    
      FROM CTE_Count as c
      INNER JOIN #BaseFareValuesStats D
          ON
              D.NDO = c.NDO and
              D.dtt_data = c.dtt_data   
      INNER JOIN @AP AP
          ON 
              AP.StartRange <= D.NDO AND
              AP.EndRange   >= D.NDO
    
        Where  D.DowCapture <> 'Saturday'
    	  and D.DowCapture <> 'Monday'
    	  and D.DowCapture <> 'Sunday'
    		 
    
    ORDER BY D.[vch_od], D.[Flt Type], D.[dtt_data_captura],		 
    	     D.[vch_empresa_editada], 
    		 D.dtt_data, AP.AP	

    Espero que ajude


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

    segunda-feira, 14 de agosto de 2017 15:21
  • Experimente fazer uns testes deixando a parte final (abaixo de --Resultado final) da seguinte forma:

    with CTE_Count as
    (
        select 
            NDO,
            dtt_data
        from #BaseFareValuesStats
        Where
            DowCapture <> 'Saturday' and 
            DowCapture <> 'Monday' and 
            DowCapture <> 'Sunday'
        group by
            NDO,
            dtt_data
        having
            count(distinct dtt_data_captura) > 1
    )
    
    
      SELECT D.[vch_empresa_editada], D.[vch_od], D.[Flt Type], D.[vch_numeros], D.[vch_mercado],
    		 D.flt_base_min, 
    		 AP.AP,
             D.[dtt_data_captura],
    		 D.[dtt_data],
    		 D.DowCapture
    
    
      FROM CTE_Count as c
      INNER JOIN #BaseFareValuesStats D
          ON
              D.NDO = c.NDO and
              D.dtt_data = c.dtt_data   
      INNER JOIN @AP AP
          ON 
              AP.StartRange <= D.NDO AND
              AP.EndRange   >= D.NDO
    
        Where  D.DowCapture <> 'Saturday'
    	  and D.DowCapture <> 'Monday'
    	  and D.DowCapture <> 'Sunday'
    		 
    
    ORDER BY D.[vch_od], D.[Flt Type], D.[dtt_data_captura],		 
    	     D.[vch_empresa_editada], 
    		 D.dtt_data, AP.AP	

    Espero que ajude


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

    Oii,

    Acho que esta quase, testei esse seu codigo e veio a tabela em branco. Agora estou tentando modificar e ir testando até que dê certo. 

    segunda-feira, 14 de agosto de 2017 18:35
  • Experimente fazer uns testes deixando a parte final (abaixo de --Resultado final) da seguinte forma:

    with CTE_Count as
    (
        select 
            NDO,
            dtt_data
        from #BaseFareValuesStats
        Where
            DowCapture <> 'Saturday' and 
            DowCapture <> 'Monday' and 
            DowCapture <> 'Sunday'
        group by
            NDO,
            dtt_data
        having
            count(distinct dtt_data_captura) > 1
    )
    
    
      SELECT D.[vch_empresa_editada], D.[vch_od], D.[Flt Type], D.[vch_numeros], D.[vch_mercado],
    		 D.flt_base_min, 
    		 AP.AP,
             D.[dtt_data_captura],
    		 D.[dtt_data],
    		 D.DowCapture
    
    
      FROM CTE_Count as c
      INNER JOIN #BaseFareValuesStats D
          ON
              D.NDO = c.NDO and
              D.dtt_data = c.dtt_data   
      INNER JOIN @AP AP
          ON 
              AP.StartRange <= D.NDO AND
              AP.EndRange   >= D.NDO
    
        Where  D.DowCapture <> 'Saturday'
    	  and D.DowCapture <> 'Monday'
    	  and D.DowCapture <> 'Sunday'
    		 
    
    ORDER BY D.[vch_od], D.[Flt Type], D.[dtt_data_captura],		 
    	     D.[vch_empresa_editada], 
    		 D.dtt_data, AP.AP	

    Espero que ajude


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

    Oii,

    Acho que esta quase, testei esse seu codigo e veio a tabela em branco. Agora estou tentando modificar e ir testando até que dê certo. 

    Não respondi, porque ainda não deu certo, ou a tabela vem vazia ou da mesma forma, sem excluir a primeira e ultima data 
    terça-feira, 15 de agosto de 2017 11:46
  • Você pode postar a sua query novamente?

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

    terça-feira, 15 de agosto de 2017 12:05
  • Experimente fazer uns testes deixando a parte final dessa forma:

    with CTE_Count as
    (
        select 
            AP.AP,
            D.dtt_data
        from #BaseFareValuesStats as D
        INNER JOIN @AP AP
            ON 
                AP.StartRange <= D.NDO AND
                AP.EndRange   >= D.NDO
        Where
            D.DowCapture <> 'Saturday' and 
            D.DowCapture <> 'Monday' and 
            D.DowCapture <> 'Sunday'
        group by
            AP.AP,
            D.dtt_data
        having
            count(distinct D.dtt_data_captura) > 1
    )
    
      SELECT D.[vch_empresa_editada], D.[vch_od], D.[Flt Type], D.[vch_numeros], D.[vch_mercado],
    		 D.flt_base_min, 
    		 AP.AP,
             D.[dtt_data_captura],
    		 D.[dtt_data],
    		 D.DowCapture
    
      FROM #BaseFareValuesStats D
      INNER JOIN @AP AP
          ON 
              AP.StartRange <= D.NDO AND
              AP.EndRange   >= D.NDO
    
      Where  
          D.DowCapture <> 'Saturday' and
          D.DowCapture <> 'Monday' and 
          D.DowCapture <> 'Sunday' and
          exists 
              (select 1 from CTE_Count as c 
               where c.AP = D.AP and c.dtt_data = D.dtt_data)
    
    ORDER BY D.[vch_od], D.[Flt Type], D.[dtt_data_captura],		 
    	     D.[vch_empresa_editada], 
    		 D.dtt_data, AP.AP	

    Espero que ajude


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

    • Marcado como Resposta Thaís Sakamoto terça-feira, 15 de agosto de 2017 15:14
    terça-feira, 15 de agosto de 2017 13:13
  • Funcionou!!

    Muito obrigada!!!

    terça-feira, 15 de agosto de 2017 15:14