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

Listados de ultimos movimientos

Estas en el tema de Listados de ultimos movimientos en el foro de Mysql en Foros del Web. Buenas tardes chic@s quería comentaros un problemilla que tengo! A ver, tengo una base de datos en mysql, con una tabla donde guardo el estado ...
  #1 (permalink)  
Antiguo 18/07/2012, 11:52
 
Fecha de Ingreso: julio-2012
Mensajes: 11
Antigüedad: 12 años, 4 meses
Puntos: 0
Pregunta Listados de ultimos movimientos

Buenas tardes chic@s quería comentaros un problemilla que tengo!

A ver, tengo una base de datos en mysql, con una tabla donde guardo el estado de cada alumno es decir ( dni (clave), fechaest(clave), tipoestado)

En dni, se guarda el dni de cada alumno

En fechaest ,se guarda la fecha en la cual cambió de estado (para tener un control de la temporalidad)

En tipoestado, se guarda el estado perteneciente a esa fecha ( ALTA o BAJA)
Queda una tabla de este tipo

12345678Y 2011-05-24 ALTA
87654321B 2011-06-10 ALTA
12345678Y 2012-01-20 BAJA
87654321B 2012-03-05 BAJA
12345678Y 2012-05-07 ALTA

La cuestión sería como puedo sacar un listado de los alumnos que actualmente están de baja o de alta?

Logre sacar las máximas fechas de cada dni junto con el, pero a la hora de ponerle el estado me salen erróneos (saca el primer estado que se encuentra..) tipo a esto:

87654321B 2012-03-05 ALTA
12345678Y 2012-05-07 ALTA (este siempre sale imitando al primero)

Cuando el estado en esa fecha para 87654321B es BAJA

A ver si me podéis ayudar!!
Gracias!
  #2 (permalink)  
Antiguo 18/07/2012, 12:55
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 10 meses
Puntos: 447
Respuesta: Listados de ultimos movimientos

Hola carlosdr:

Puedes hacerlo con un INNER JOIN, más o menos así:

Código MySQL:
Ver original
  1. mysql> SELECT * FROM tabla;
  2. +-----------+------------+--------+
  3. | dni       | fecha      | estado |
  4. +-----------+------------+--------+
  5. | 12345678Y | 2011-05-24 | ALTA   |
  6. | 87654321B | 2011-06-10 | ALTA   |
  7. | 12345678Y | 2012-01-20 | BAJA   |
  8. | 87654321B | 2012-03-05 | BAJA   |
  9. | 12345678Y | 2012-05-07 | ALTA   |
  10. +-----------+------------+--------+
  11. 5 rows in set (0.01 sec)
  12.  
  13. mysql> SELECT T1.* FROM tabla T1
  14.     -> INNER JOIN
  15.     -> ( SELECT dni, MAX(fecha) max_fecha
  16.     ->   FROM tabla
  17.     ->   GROUP BY dni) T2 ON T1.dni = T2.dni AND T1.fecha = T2.max_fecha;
  18. +-----------+------------+--------+
  19. | dni       | fecha      | estado |
  20. +-----------+------------+--------+
  21. | 87654321B | 2012-03-05 | BAJA   |
  22. | 12345678Y | 2012-05-07 | ALTA   |
  23. +-----------+------------+--------+
  24. 2 rows in set (0.00 sec)

Saludos
Leo.
  #3 (permalink)  
Antiguo 18/07/2012, 15:38
 
Fecha de Ingreso: julio-2012
Mensajes: 11
Antigüedad: 12 años, 4 meses
Puntos: 0
Respuesta: Listados de ultimos movimientos

Gracias! leo!! :)

Una duda que me surgió al ver esto T2 sería una tabla temporal?

Crearía problemas al meter la consulta en una vista?

Para luego lanzar las consultas sobre esta?

--------------------------------------------------------------------------------------

Me auto respondo ya que probé y si me dio error al crear una vista, por tener una subconsulta.

Lo que hice fue crear dos vistas de tal forma:

CREATE VIEW maxfechaest AS SELECT dnie, MAX(fechaest) maxfecha FROM estado GROUP BY dnie;

CREATE VIEW diario AS SELECT estado.* FROM estado INNER JOIN maxfechaest ON estado.dnie = maxfechaest.dnie AND estado.fechaest = maxfechaest.maxfecha;

No existe alguna forma de tenerlo todo nada más que usando una vista?

Gracias!!

Última edición por carlosdr; 18/07/2012 a las 15:58 Razón: solucionado
  #4 (permalink)  
Antiguo 19/07/2012, 07:52
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 10 meses
Puntos: 447
Respuesta: Listados de ultimos movimientos

Hola Carlos.

La tabla T2 no es una vista, simplemente es un ALIAS para una subconsulta... la consulta podrías ejecutarla tal cual la puse, sin necesidad de crear vistas adicionales.

Saludos
Leo.
  #5 (permalink)  
Antiguo 19/07/2012, 08:35
 
Fecha de Ingreso: julio-2012
Mensajes: 11
Antigüedad: 12 años, 4 meses
Puntos: 0
Respuesta: Listados de ultimos movimientos

Gracias !!

Etiquetas: fecha, listado, orden, temporal
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 11:22.