Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

135
Visualizações
¿Cómo puedo seleccionar todas las columnas de una subconsulta que solo contiene algunas?

tengo la siguiente consulta:

 SELECT id, MAX(`grab_time`) AS `grab_time` FROM events WHERE ended = false GROUP BY id

Esto devuelve todos los registros que tienen el mayor grab_time en comparación con otros registros que tienen la misma id .

Sin embargo, la tabla de events tiene cuatro columnas y las quiero todas. Me han aconsejado que coloque la consulta anterior en una subconsulta para obtener las columnas que faltan (solo muestra 2), pero no sé cómo hacerlo.

¿Cómo puedo decirle a sql que básicamente "SELECCIONE todo DONDE están las filas de las filas en ()"?

over 4 years ago · Santiago Trujillo
3 Respostas
Responde à pergunta

0

Puede utilizar una subconsulta correlacionada:

 select e.* from events e where not e.ended and e.grab_time = (select max(e2.grab_time) from events e2 where e2.id = e.id and not e2.ended);

Desea un índice de events(id, ended, grab_time) para esta consulta.

O use row_number() :

 select e.* from (select e.*, row_number() over (partition by id order by grab_time desc) as seqnum from events e where not ended ) e where seqnum = 1;
over 4 years ago · Santiago Trujillo Relatório

0

Puede utilizar IN como

 select * from events where (id,grab_time) in (SELECT id, MAX(`grab_time`) AS `grab_time` FROM events WHERE ended = false GROUP BY id)

También puede usar la función de ventanas MAX de la siguiente manera:

 select * from ( select t.*, max(grab_time) over (partition by id) as mx from your_table where ended = false ) where grab_time = mx
over 4 years ago · Santiago Trujillo Relatório

0

Un enfoque puede ser el uso de tablas temporales:

 with max_time as ( select id,MAX(grab_time) as grab_time FROM events where ended='false' GROUP BY id ) select * from events e,max_time mt where e.id=mt.id and e.grab_time=mt.grab_time;
over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda