Usuário com melhor resposta
Inner Join

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
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
Todas as Respostas
-
-
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
-
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:
- Editado Thaís Sakamoto sexta-feira, 11 de agosto de 2017 12:56
-
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
-
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
-
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
-
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
- Editado Thaís Sakamoto 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
-
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.
-
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
-
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
-
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
-
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
-
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.
-
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.
-
Você pode postar a sua query novamente?
Assinatura: http://www.imoveisemexposicao.com.br
-
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
-