Jump to content
Sign in to follow this  
Jonas Tomazelli

Dúvida GROUP BY com referencias trocadas

Recommended Posts

Boa tarde pessoal, estou precisando fazer um SQL, mas não estou conseguindo finalizar, abaixo vou passar uma tabela como exemplo, então consideramos os seguintes dados:

ID | MATRICULA | HORA | CODIGO

1 1212 10:00 999
2 1212 10:00 1
3 1212 10:00 10
4 1212 10:00 25
5 1212 10:00 50
6 1212 12:00 900
7 1212 13:00 901

Blz, eu preciso agrupar esse dados por MATRICULA e HORA, e preciso mostrar o CODIGO, mas tem que ser o mesmo código do menor ID, exemplo, essa tabela acima, agrupada como eu quero deveria ficar assim:

ID | MATRICULA | HORA | CODIGO

1 1212 10:00 999
6 1212 12:00 900
7 1212 13:00 901

Espero ter sido claro. A principio parecia simples, estava resolvendo com a função MIN, mas o problema é que um ID 1 pode ter um código 900 e um ID 2 um menor.

Share this post


Link to post
Share on other sites

Obrigado pela resposta. Mas nesta sua lógica o SQL vai retornar o menor ID, mas o código continua não obedecendo a referencia, preciso que o código seja o mesmo do menor ID. EX:

ID MATRICULA CODIGO

01 1212 999

02 1212 800

03 1212 700

04 1212 850

05 1212 1050

No seu SQL o retorno é o seguinte:

01 1212 700, mas preciso que seja 01 1212 999, ou seja, o código obedece seu ID original.

Share this post


Link to post
Share on other sites

Bom dia, obrigado a todos pela ajuda. Consegui resolver da seguinte maneira:

Select 
   x.id, x.matricula, x.hora, y.codigo
From 
   (select 
      min(a.id) id, a.matricula, a.hora 
    from 
      teste a
    group by 
      a.matricula, a.hora) x, teste y
where 
   y.id = x.id;

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
Sign in to follow this  

  • Similar Content

    • By Viniciusr9
      Boa tarde pessoal,
      basicamente eu preciso do retorno de horas entre duas datas, porém tenho condições a tratar .
      basicamente tenho 2 colunas ( dt_fim e dt_ini ) que representam data final e data inicial. Preciso da diferença entre as duas retornada em uma outra coluna (hr_ausencias) , porém a cada dia posso computar no máximo 9 horas, e desconsiderar finais de semana e feriados( esses cadastrados em uma tabela) . Seria melhor tratar isso com uma Trigger , um Script PL/SQL , como me sugerem? Agradeço quem puder ajudar.
    • By eduardohaag
      Olá pessoal,
      Estou trabalhando em um projeto de estudo onde tenho uma tabela onde possui o cadastro de funcionários e a empresa onde trabalha.
      Preciso criar uma query que retorne o nome da empresa que possui a menor quantidade de funcionários.
      Tenho em minha mente que parece uma coisa simples, possivelmente utilizando as funções Count e MIN, mas não estou conseguindo chegar a um raciocino pra chegar nessa condição.
    • By edvaldo joviano de paula
      Prezados, boa tarde!
      Preciso de uma ajuda sendo possível:
       
      Tenho o seguinte cenário em uma consulta ( formação de kits de produtos tendo como produto principal um valor igual, ex: produto 1 é formado pelos produtos 2 e 3)
      select codkit, produtos from kit where codkit = 1
      ---   ----
      1    2
      1    3
      Percebem que o resultado traz o codigo do kit (1) e os produtos que compoem este kit (2,3), porem o produto 2 tambem faz parte do kit 4 junto com o produto 10 e produto 3 faz parte do kit 5 junto com o produto 11 sendo:
      kit 1 (2,3)
      kit 4 (2,10)
      kit 5 (3,11).
       
      Eu preciso de uma ajuda sobre alguma função que ao comprar os produtos 2 e 3 e estes estando na mesma nota fiscal (select produtos from notafiscal = x) traga o resultado do kit que estes dois produtos juntos formam, exemplo, ao pesquisar (select produtos from notafiscal = x) nesta nota existir os produtos 2 e 3 traga o resultado 1, se na nota existir os produtos 2 e 10 traga o resultado 4 e se existir na consulta dos itens da nota os itens 3 e 11 o resultado seja 5. Caso na pesquisa eventualmente existir por exemplo 10 unidades do item 2, 5 unidades do item 3 e 5 unidades do item 10, o resultado deve ser 1 e 4 pois 5 unidades do 2+5 unidades do 3 forma o kit 1 e 5 unidades do 2+ 5 unidades do 10 formam o kit 4.
       
      Espero ter explicado de forma a ser entendido e agradeço a ajuda.
       
    • By Viniciusr9
      Boa tarde pessoal,
      Sei que tem varios tópicos sobre esse erro, porém analisei todos e nenhum foi aplicável ao meu caso ( a maioria era porquê o pessoal esquecia do Group By ao final das Querys) . 
      Se alguém puder ajudar, agradeço . Os campos sem função estão inseridos no group by, porém o erro persiste .
       
       

       
      SELECT * FROM( select LPAD(C.MES_COMPETENCIA,2,'0') ||'/'||C.ANO_COMPETENCIA AS PROJETO, E.DS_EQUIPE as EQUIPE, SUM(NVL((CC.QT_HORAS_CHEIA - SUM(AU.DT_FIM - AU.DT_INI)*24 ),CC.QT_HORAS_CHEIA)) as "ESFORÇO CALCULADO" from EQUIPE E, COLABORADOR C1, COMPETENCIA C, COMPETENCIA_COLABORADOR CC, AUSENCIAS AU where E.CD_EQUIPE=CC.CD_EQUIPE and C.CD_COMPETENCIA=CC.CD_COMPETENCIA and C1.CD_COLABORADOR=CC.CD_COLABORADOR and C1.STATUS = 1 AND C1.CD_GESTOR <> C1.CD_COLABORADOR AND AU.CD_COLABORADOR (+) = C1.CD_COLABORADOR GROUP BY E.DS_EQUIPE, LPAD(C.MES_COMPETENCIA,2,'0') ||'/'||C.ANO_COMPETENCIA ) VT WHERE VT.PROJETO = ((select to_char(sysdate, 'MM') from dual)||'/'||(select to_char(sysdate, 'RRRR') from dual))  
×

Important Information

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