MySQL - subconsultas

   
Vista:

subconsultas

Publicado por jenifer (1 intervención) el 24/01/2011 01:47:06
Necesito ayuda con una consulta que estoy realizando en la cual empleo 3 tablas y lo que necesito es que me muestre es el estado del ultimo registro ingresado. las tablas son equipo, estadoequipo y estado.
equipo tiene un consecutivo, un codigo, memoria, procesador y la clave foranea de otra tabla llamada aulas.
estado equipo tiene un consecutivo, fecha, observación,la clave foranea de consecutivo tabla equipo y la otra clave foranea de estado.
estado esta conformado con el codigo del estado y el nombre.
Deseo que me liste los equipo de cada una de las salas pero que con la condición que me liste el ultimo estado que se registro para ese equipo.
Lo intente con una subconsulta y un select max, pero me ha funcionado.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:subconsultas

Publicado por Leonardo Josué (81 intervenciones) el 24/01/2011 16:44:41
Hola Jenifer:

Tal como lo comentas en su post, para esta consulta lo que necesitas hacer es un max(fecha) y meterlo como una subconsulta, así que creo que el problema es en cómo estas construyendo la consulta. No pones ningún dato de ejemplo, ni tampoco pones cuales son los nombres de tus tablas, lo que dificulta un poco tratar de ayudarte, pero voy a hacer algunas suposiciones y espero que te sirva. En primer logar, supongo que tu tabla EQUIPO es más o menos asi

idEquipo|codigo|memoria|procesador|idAula
-----------------------------------------------------------------------
1|codigo 1|memoria 1|procesador 1|10
2|codigo 2|memoria 2|procesador 2|10
3|codigo 3|memoria 3|procesador 3|10

Tu tabla ESTADOS supongo que es más o menos así:

idEstado|nombre
-----------------------------------
1|Funcionando
2|En reparacion

y por último, voy a supones que tu tabla ESTADOEQUIPO es más o menos así:

idEstadoEquipo|fecha|observacion|idEquipo|idEstado
---------------------------------------------------------------------------------
1|2011-01-04 00:00:00|Observacion 1|1|1
2|2011-01-03 00:00:00|Observacion 2|1|1
3|2011-01-02 00:00:00|Observacion 3|2|2
4|2011-01-04 00:00:00|Observacion 4|2|1
5|2011-01-01 00:00:00|Observacion 5|3|2

De aquí se observa que el equipo 1 tienes dos registros con fechas 3 y 4 de enero, el equipo 2 tiene también dos registros con fechas 2 y 4 de enero mientras que el equipo 3 tiene sólo un registro con fecha 1 de enero. para obtener sólo el estado con la última fecha para cada equipo lo haces así:

select idEquipo, max(fecha) as maxFecha from estadoequipo group by idEquipo

Y lo único que tienes que hacer es un INNER JOIN entre las tres tablas que tienes e incluir esta subconsulta como una nueva tabla, es decir algo como esto:

select eq.idEquipo, ee.fecha, es.nombre, ee.observacion from estadoequipo ee
inner join (select idEquipo, max(fecha) as maxFecha from estadoequipo group by idEquipo) T1
on T1.maxfecha = ee.fecha and T1.idEquipo = ee.idEquipo
inner join equipo eq on eq.idEquipo = ee.idEquipo
inner join estados es on es.idEstado = ee.idEstado

la consulta te regresa la siguiente información:

idEquipo|fecha|nombre|observacion
-----------------------------------------------------------------------------
1|2011-01-04 00:00:00|Funcionando|Observacion 1
2|2011-01-04 00:00:00|Funcionando|Observacion 4
3|2011-01-01 00:00:00|En reparacion|Observacion 5

Haz la prueba y nos comentas. Si continuas con problemas te pido que nos pongas algunos datos de ejempli y que incluyas la consulta que intentaste hacer para ver en donde puede estar el error.

Saludos
Leo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar