Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

Problema con subconsulta

Estas en el tema de Problema con subconsulta en el foro de Mysql en Foros del Web. Estoy intentando obtener los siguientes registros de una sola tabla y no logro obtener lo que quiero. De una tabla obtener los registros que esten ...
  #1 (permalink)  
Antiguo 18/04/2012, 13:06
Avatar de LuZBinG  
Fecha de Ingreso: enero-2008
Mensajes: 407
Antigüedad: 16 años, 3 meses
Puntos: 5
Problema con subconsulta

Estoy intentando obtener los siguientes registros de una sola tabla y no logro obtener lo que quiero.

De una tabla obtener los registros que esten rechazados agrupados por periodo y ejercicio:

id----status--------------periodo----ejercicio
1 OK ENERO 2012
2 OK MARZO 2011
7 RECHAZADO FEBRERO 2011
5 REV FEBRERO 2011
4 REV FEBRERO 2011
9 RECHAZADO JUNIO 2011
6 OK JUNIO 2011

resultado:
id----->7 FEBRERO 2011
id---->9 JUNIO 2011


mi consulta:

Código:
SELECT max(tb1.id) as max_id,tb1.status
FROM tabla tb11
inner JOIN(SELECT id,max(id) AS max_id,status FROM tabla where status='RECHAZADO'  GROUP BY ejercicio desc, periodo asc) 
tb2 ON  max_id  = tb2.max_id and tb1.status=tb2.status

GROUP BY sat1.ejercicio desc, sat1.periodo asc
haber si me pueden dar una ayuda

gracias
__________________
LuZbIng
  #2 (permalink)  
Antiguo 18/04/2012, 13:56
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Respuesta: Problema con subconsulta

LuzBing,
creo que deberías explicarnos con más detalle qué quieres exactamente. Me explicaré yo:
para sacar lo que sacas, te basta una consulta como esta:
SELECT t1.id, t1.status, t1.periodo, t1.ejercicio FROM (SELECT id, status, periodo, ejercicio FROM tabla WHERE status = 'RECHAZADO' ORDER BY ejercicio DESC, periodo ASC) t1 GROUP BY t1.periodo, t1.ejercicio

Dinos si es eso o hay algún requisito más.
  #3 (permalink)  
Antiguo 18/04/2012, 14:06
Avatar de LuZBinG  
Fecha de Ingreso: enero-2008
Mensajes: 407
Antigüedad: 16 años, 3 meses
Puntos: 5
Respuesta: Problema con subconsulta

gracias tu consulta esta bien obtengo lo que quiero pero por fin logre hacer la yo
asi
SELECT t1.id,t1.periodo,t1.ejercicio, max(t1.id) AS max_id,t1.status FROM tabla t1
inner join (SELECT id,status,max(id) AS max_id FROM tabla GROUP BY ejercicio desc, periodo asc ) t2 ON t1.id=t2.max_id
where t1.status='RECHAZADO'
GROUP BY ejercicio desc, periodo asc

cual es la diferencia o cual es la correcta, con las dos obtengo lo que quiero?
__________________
LuZbIng
  #4 (permalink)  
Antiguo 21/04/2012, 04:52
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Respuesta: Problema con subconsulta

No soy un técnico para poder decirte qué es mejor. Opino que la que te propongo es mejor, porque tú usas dos group by y dos max, que obligan a comparar con todos los elementos. Mi consulta en realidad sólo necesita un order (el otro te lo puedes ahorrar). Puedes comprobar pasando un explain a la consulta y también lo verás en propia ejecución sobre un número amplio de datos viendo el tiempo empleado. Es lo que puedo decirte y tampoco estoy seguro del todo.

Etiquetas: join, registros, select, subconsulta, tabla
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 05:22.