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

Filtrar tabla creada sobre últimos registros agrupados

Estas en el tema de Filtrar tabla creada sobre últimos registros agrupados en el foro de Mysql en Foros del Web. Muy buenas, no sabía cómo poner el asunto... espero haber sido claro... Tengo una tabla donde almaceno las solicitudes de revisión de un usuario, almaceno ...
  #1 (permalink)  
Antiguo 26/01/2016, 04:31
Avatar de X3mdesign  
Fecha de Ingreso: octubre-2003
Ubicación: Madrid
Mensajes: 649
Antigüedad: 20 años, 6 meses
Puntos: 2
Filtrar tabla creada sobre últimos registros agrupados

Muy buenas, no sabía cómo poner el asunto... espero haber sido claro...

Tengo una tabla donde almaceno las solicitudes de revisión de un usuario, almaceno el id_usuario a revisar, la fecha, quién realiza la petición (id_admin) y un texto descriptivo. El estado puede ser 1 ó 0. Y lo que quier es saber en qué fecha se hizo la última solicitud y de qué estado es para poder mostrar sólo las que su estado = 1.

Os cuento, gracias a este aporte de jurena, en 2013, Seleccionar solo ultimo registro por fecha de un grupo previamente seleccionado, he podido entender cómo montar la query, pero ahora me viene una duda, ¿cómo podría sacar sólamente los que tengan un estado determinado? ¿cómo ordenar la tabla por fecha?

Se me ha ocurrido el grabar esos datos cada vez que se realice la consulta en una tabla "cache" para poder hacer un select sencillo de la tabla, pero no se si es el método más correcto. Entiendo que la tabla habría que vaciarla cada vez que se realice la consulta y no creo que sea lo más óptimo.

Esta sería mi tabla:
[CODE]
Código MySQL:
Ver original
  1. CREATE TABLE IF NOT EXISTS `usuarios_revisiones` (
  2.   `id` int(11) NOT NULL,
  3.   `id_admin` int(11) NOT NULL,
  4.   `id_usuario` int(11) NOT NULL,
  5.   `estado` tinyint(1) NOT NULL DEFAULT '0',
  6.   `observaciones` mediumtext COLLATE latin1_general_ci NOT NULL
  7. ) ENGINE=InnoDB AUTO_INCREMENT=358 DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci;
Esta sería mi query:
Código MySQL:
Ver original
  1. SELECT t1.id_paciente, t1.fecha_hora, t1.estado
  2.  FROM (SELECT id_paciente, fecha_hora, estado FROM pacientes_revisiones ORDER BY id_paciente, fecha_hora DESC) t1
  3. GROUP BY t1.id_paciente

Y si la pongo así, me muestra el último estado=1 de cada paciente, aunque tenga estados=0 posteriormente añadidos:
Código MySQL:
Ver original
  1. SELECT t1.id_paciente, t1.fecha_hora, t1.estado
  2.  FROM (SELECT id_paciente, fecha_hora, estado FROM pacientes_revisiones ORDER BY id_paciente, fecha_hora DESC) t1
  3. WHERE t1.estado=1
  4.  GROUP BY t1.id_paciente


Muchas gracias!!
__________________
Nippon-Tour, tu portal sobre Japón
¿Te gusta el manga, haces tus propios dibujos? Visita FanArt de Nippon-Tour

Última edición por gnzsoloyo; 27/01/2016 a las 06:28 Razón: Sin etiquetar
  #2 (permalink)  
Antiguo 26/01/2016, 12:11
Avatar de carlillos  
Fecha de Ingreso: febrero-2007
Ubicación: México
Mensajes: 245
Antigüedad: 17 años, 2 meses
Puntos: 21
Respuesta: Filtrar tabla creada sobre últimos registros agrupados

Esa subconsulta creo que no te sirve de mucho.
Código MySQL:
Ver original
  1. SELECT t1.id_paciente, t1.fecha_hora, t1.estado
  2.  FROM (SELECT id_paciente, fecha_hora, estado FROM pacientes_revisiones ORDER BY id_paciente, fecha_hora DESC) t1
  3. WHERE t1.estado=1 GROUP BY t1.id_paciente
es igual a :
Código MySQL:
Ver original
  1. SELECT id_paciente, fecha_hora, estado FROM pacientes_revisiones
  2. WHERE estado = 1
  3. GROUP BY id_paciente
  4. ORDER BY id_paciente, fecha_hora DESC

Última edición por gnzsoloyo; 27/01/2016 a las 07:02 Razón: Claridad de codigo
  #3 (permalink)  
Antiguo 27/01/2016, 05:15
Avatar de X3mdesign  
Fecha de Ingreso: octubre-2003
Ubicación: Madrid
Mensajes: 649
Antigüedad: 20 años, 6 meses
Puntos: 2
Respuesta: Filtrar tabla creada sobre últimos registros agrupados

Sí que sirve Carlillos,

GROUP te agrupa los registros por id, pero siempre te coge el valor del primero, por eso, lo que hace la query es ordenarlos por id_usuario y fecha, así colocamos a los usuarios seguidos y con el registro más reciente el primero, una vez hecho ese SELECT, se agrupa el resultado por el id_usuario.
__________________
Nippon-Tour, tu portal sobre Japón
¿Te gusta el manga, haces tus propios dibujos? Visita FanArt de Nippon-Tour
  #4 (permalink)  
Antiguo 27/01/2016, 06:06
 
Fecha de Ingreso: junio-2011
Mensajes: 289
Antigüedad: 12 años, 10 meses
Puntos: 15
Respuesta: Filtrar tabla creada sobre últimos registros agrupados

Cita:
Iniciado por X3mdesign Ver Mensaje
Sí que sirve Carlillos,

GROUP te agrupa los registros por id, pero siempre te coge el valor del primero, por eso, lo que hace la query es ordenarlos por id_usuario y fecha, así colocamos a los usuarios seguidos y con el registro más reciente el primero, una vez hecho ese SELECT, se agrupa el resultado por el id_usuario.
Se refiere a que tu consulta no tiene lógica... estas haciendo un from de un select que no filtra nada, y que es igual a decirle que muestre datos directamente de la tabla...

Fíjate en las 2 consultas y ve cual se ve mejor... ambas hacen exactamente lo mismo.. la segunda mil veces más optima

Etiquetas: agrupados, fecha, filtrar, registro, registros, select, 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 10:12.