Jump to content
Alessandro Almeida

NOT IN na mesma tabela

Recommended Posts

Pessoal,

Eu preciso exibir as linhas que  houveram alguma alteração de acordo com a DATA.

Segue o código:

SELECT * FROM `inventario` WHERE usuario NOT IN (SELECT usuario FROM `inventario` where data='11/01/2018')

Obs:  Se houver alteração em algum campo de outra coluna não irá exibir. Como posso acrescentar nesse código que exibe qualquer  alteração?

id ativo tipodeativo marcamodelo status usuario centrodecusto filial data
1 12345678 celular positivo p30 in use alessandro.albuquerque 561308 br04 11/01/2018
2 12344321 celular positivo p30 in use diego.bordini 561308 br01 11/01/2018
3 43211234 celular positivo p30 in use alisson.brito 561308 brn1 11/01/2018
9 87654321 celular positivo p30 in use alessandro.albuquerque 561308 br04 11/01/2018
4 12345678 celular positivo p30 in use carlos.augusto 561308 br04 11/02/2018
5 12344321 celular positivo p30 in use diego.bordini 561308 br01 11/02/2018
6 43211234 celular positivo p30 in use alisson.brito 561308 brn1 11/02/2018
7 87654321 celular positivo p30 in use alessandro.albuquerque 561331 br04 11/02/2018

No exemplo acima, o usuário alessandro.abuquerque mudou o Centro de Custo e exibiu apenas a mudança de usuário.

Share this post


Link to post
Share on other sites

Desculpe. Eu não formulei a pergunta corretamente. Deve ter sido o exaustão.

 

Vou explicar o conceito dessa consulta:

 1. Existe um inventário mensal com todos os ativos

 2. As colunas são id,ativo,tipodeativo,marcamodelo,status,usuario,centrodecusto,filial,data

 3. Estou no terceiro mês ou subsequente a ele(quarto, quinto sexto etc...)

 

Como irei consultar a diferença do último inventário, ou seja, a diferença das últimas duas datas?

 

exemplo:

id ativo tipodeativo marcamodelo status usuario centrodecusto filial data
1 12345678 celular positivo p30 in use alessandro.albuquerque 561308 br04 11/01/2018
2 12345678 celular positivo p30 in use diego.bordini 561308 br01 11/02/2018
3 12345678 celular positivo p30 in use alisson.brito 561308 brn1 11/03/2018
4 12345678 celular positivo p30 in use alessandro.albuquerque 561341 br04 11/04/2018
5 12345678 celular positivo p30 in use carlos.augusto 561308 br02 11/05/2018

Share this post


Link to post
Share on other sites

Tentou criar duas tabela virtuais por select e fazer um join explicito

 

algo como

 

select *
from (SELECT *
      FROM `inventario`
      data = '11/01/2018') mes1,
     (SELECT *
      FROM `inventario`
      data = '11/02/2018') mes2
where mes1.usuario = mes2.usuario

refinando a questão da data (último dia)

 

mas grosso modo seria isto

Share this post


Link to post
Share on other sites
6 horas atrás, Motta disse:

Tentou criar duas tabela virtuais por select e fazer um join explicito

 

algo como

 


select *
from (SELECT *
      FROM `inventario`
      data = '11/01/2018') mes1,
     (SELECT *
      FROM `inventario`
      data = '11/02/2018') mes2
where mes1.usuario = mes2.usuario

refinando a questão da data (último dia)

 

mas grosso modo seria isto

 

Acho que estou enferrujado em MYSQL.

Não consegui encaixar JOIN nesse código.

Eu conseguir encaixar um WHERE mas duplicou as colunas.

select *
from (SELECT *
      FROM `inventario` WHERE
      data = '11/01/2018') mes1,
     (SELECT * WHERE
      FROM `inventario`
      data = '11/02/2018') mes2
where mes1.usuario = mes2.usuario

 

Share this post


Link to post
Share on other sites

O join já está aí , as colunas não duplicaram , são de dois meses.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Similar Content

    • By ronimarcos.silva
      Como faço para usar o Case com o "In", por exemplo no caso abaixo?
      (case gope.cd_grp_operat when 1 then 1 when 3 then 1 when 15 then 1 when 25 then 1 when 35 then 1 when 45 then 1 when 55 then 1 else 99 end ) ib_controla_km, -- Eu posso fazer asism? (case gope.cd_grp_operat when in (1, 3, 15, 25, 35, 45, 55) else 99 end ) ib_controla_km, Ou assim, aninhando o (1, 3, 45) dentro de um "IN": 
       
      (case gope.cd_grp_operat when gope.cd_grp_operat = 1 then (Select Vl_hori_odom From Apabastec_De Where Apabastec_De.Id_Equipto = eq.id_equipto And Dt_Abastec = (Select Max(Dt_Abastec) From Apabastec_De Where ID_Equipto = eq.id_equipto) ) when 2 then (Select Vl_hori_odom From Apabastec_De Where Apabastec_De.Id_Equipto = eq.id_equipto And Dt_Abastec = (Select Max(Dt_Abastec) From Apabastec_De Where ID_Equipto = eq.id_equipto) ) when 45 then (Select Vl_hori_odom From Apabastec_De Where Apabastec_De.Id_Equipto = eq.id_equipto And Dt_Abastec = (Select Max(Dt_Abastec) From Apabastec_De Where ID_Equipto = eq.id_equipto) )else 0 end)f_km_inicial,  
    • By PeeWee
      Preciso fazer uma busca de modo que me traga o registro que nao consta na tabela, parece estranho e é, pois na verdade foi meio que uma gambiarra que coloquei no código pois preciso que me exiba o profissional que nao está ocupado no momento, acho que fui claro.
       
      NESTE TRECHO FAÇO O SELECT DE MODO QUE ME TRAGA OS PROFISSIONAIS QUE JA ESTAO AGENDADOS
      $text = mysqli_query($conn, "SELECT a.id_prof_escolhido, u.niveis_acesso_id FROM agendamento AS a JOIN usuarios AS u ON u.id = a.id_prof_escolhido WHERE dia = '$diaAgendado' AND hora_inicio = '$hora1' GROUP BY a.id_prof_escolhido ");
      $text2 = mysqli_fetch_array($text);
       
      AQUI É O MESMO CÓDIGO SÓ QUE ME TRAZ DE FORMA DECRESCENTE, fiz dessa forma pois só com o código acima ele só enxergava o primeiro registro
       $gambiarra = mysqli_query($conn, "SELECT a.id_prof_escolhido, u.niveis_acesso_id FROM agendamento AS a JOIN usuarios AS u ON u.id = a.id_prof_escolhido WHERE dia = '$diaAgendado' AND hora_inicio = '$hora1' GROUP BY a.id_prof_escolhido DESC ");
       $gambiarra2 = mysqli_fetch_array($gambiarra);
       
      O PROBLEMA AGORA É QUE ELE SÓ ENXERGA O PRIMEIRO E O ULTIMO, E NAO OS INTERMEDIARIOS
       
      $nome = mysqli_query($conn, "SELECT id, nome, niveis_acesso_id, foto FROM usuarios WHERE id NOT IN('$text2[0]', '$gambiarra2[0]') AND niveis_acesso_id = '$escolhido' ");
       
      AQUI FAÇO O SELECT DE MODO QUE NAO ME TRAGA QUEM JA ESTÁ SELECIONADO ACIMA, COM BASE EM UMA OUTRA TABELA.
       
      GOSTARIA QUE ESTE NOT IN ME TROUXESSE QUEM ESTÁ DISPONIVEL, MAS QUE NAO CONSTE DOS SELECTS ANTERIORES, NAO SEI SE CONSEGUI SER CLARO. 
       
      ESPERO UMA SUGESTAO DOS COLÉGAS POIS TALVEZ SEJA ALGO SIMPLES MAS NAO SEI O QUE FAZER, PENSEI EM BETWEEN MAS TBÉM NAO VAI DAR CERTO. BOM.. ESPERO SUGESTOES.
×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.