Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

136
Vistas
¿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 Respuestas
Responde la pregunta

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 Denunciar

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 Denunciar

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 Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda