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

mostrar ultimo registro de un group by de varias tablas

Estas en el tema de mostrar ultimo registro de un group by de varias tablas en el foro de Mysql en Foros del Web. Buenas noches, Mi problema es el siguiente: tengo 4 tablas: empresas, socios, buses y alertas Es algo como lo siguiente, una empresa de buses tiene ...
  #1 (permalink)  
Antiguo 17/06/2012, 21:22
 
Fecha de Ingreso: mayo-2010
Mensajes: 3
Antigüedad: 13 años, 11 meses
Puntos: 0
Exclamación mostrar ultimo registro de un group by de varias tablas

Buenas noches,

Mi problema es el siguiente:

tengo 4 tablas: empresas, socios, buses y alertas

Es algo como lo siguiente, una empresa de buses tiene socios los cuales tienen buses y los buses emiten unas alertas.

Empresas

id_empresa
nombre

Socio

id_socio
nombre
cf_empresa ---- foránea de empresa

buses

id_bus
placa
imei
cf_socio

alertas

id_alerta
latitud
longitud
fecha
velocidad
cf_bus

Trato de hacer una consulta donde se muestre la ultima alerta de los buses por socio, es decir:

Si un socio tiene 3 buses, que me muestre la ultima alerta de los 3 buses.

Lo intente agrupandolos por (group by) la placa del bus

Pero me sale solo la primera alerta que hizo el bus y yo necesito la ultima.

Ojala alguien me pueda indicar como lo hago.

Muchas Gracias

Saludos

Julian Rojas
  #2 (permalink)  
Antiguo 18/06/2012, 07:01
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: mostrar ultimo registro de un group by de varias tablas

Código MySQL:
Ver original
  1. SELECT b.placa,MAX(id_alerta)
  2. FROM buses b INNER JOIN alertas a ON b.placa=a.cf_bus
  3. GROUP BY b.placa

Esto nos el id de la ultima alerta de cada bus....

Luego

Código MySQL:
Ver original
  1. FROM buses b INNER JOIN alertas a
  2.              ON b.placa=a.cf_bus
  3. WHERE a.id_alerta IN (SELECT MAX(id_alerta)
  4.                                       FROM buses b
  5.                                            INNER JOIN alertas a
  6.                                                ON b.placa=a.cf_bus
  7.                                     GROUP BY b.placa)
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.
  #3 (permalink)  
Antiguo 18/06/2012, 08:20
 
Fecha de Ingreso: mayo-2010
Mensajes: 3
Antigüedad: 13 años, 11 meses
Puntos: 0
Respuesta: mostrar ultimo registro de un group by de varias tablas

Hola quimfv,

Primero que todo muchas gracias por tu ayuda, cambie la consulta un poco porque la placa no era el id del bus,el id del bus es id_bus

y cambie la condición de "a.id_alerta" a "a.fecha".

Código MySQL:
Ver original
  1. FROM buses b INNER JOIN alertas a
  2.              ON b.id_bus=a.cf_bus
  3. WHERE a.fecha IN (SELECT MAX(fecha)
  4.                                       FROM buses b
  5.                                            INNER JOIN alertas a
  6.                                                ON b.id_bus=a.cf_bus
  7.                                     GROUP BY b.placa)

De nuevo muchas gracias, solucionaste mi problema.

Saludos

Julian Rojas
  #4 (permalink)  
Antiguo 19/06/2012, 02:13
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: mostrar ultimo registro de un group by de varias tablas

Si el id_alerta es auto incremental y PK será mas rapido que usando la fecha, por el indice que implica la PK, siempre que la fecha sea automatica y portanto la fecha maxima se corresponda con el id maximo claro. Si la fecha se introduce manualmente luego es posible que no entren por orden y tu opción sera la buena, en este caso yo crearia un indice sobre fecha..... Si la fecha es date (no date time) puedes tenr varias alertas con la misma fecha....
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.

Etiquetas: tablascruzadas, jquery-mobile
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 08:38.