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

[SOLUCIONADO] Mostrar ultimo registro por fecha, Varias tablas involucradas

Estas en el tema de Mostrar ultimo registro por fecha, Varias tablas involucradas en el foro de Mysql en Foros del Web. Hola comunidad, verán que tenga una consulta, el problema es que necesito mostrar el último registro de la tabla: elec_detalle, mediante su fecha_audita, para cada ...
  #1 (permalink)  
Antiguo 29/04/2015, 08:54
 
Fecha de Ingreso: abril-2015
Mensajes: 6
Antigüedad: 9 años, 6 meses
Puntos: 0
Pregunta Mostrar ultimo registro por fecha, Varias tablas involucradas

Hola comunidad, verán que tenga una consulta, el problema es que necesito mostrar el último registro de la tabla: elec_detalle, mediante su fecha_audita, para cada paciente, el problema es que en la tabla elec_detalle no se encuentra el idpaciente, sino que se encuentra el idelectrocardiograma de la tabla electrocardiograma, y es, esta tabla la que si se relaciona con idpaciente
Espero ser claro, de todas formas esta es mi consulta:

Código MySQL:
Ver original
  1. c.fecha,
  2. c.codigo,
  3. concat(p.apellidos, ' ', p.nombres),
  4. coalesce(if(bi='1', 'NORMAL', diagnostico), '-') as DiagnosticoElectro
  5. from comprobante c
  6. inner join paciente p on c.idpaciente=p.idpaciente
  7. left join electrocardiograma e on p.idpaciente=e.idpaciente
  8. left join elec_detalle el on e.idelectrocardiograma = el.idelectrocardiograma
  9. and el.fecha_audita =(select max(fecha_audita) from elec_detalle el where e.idelectrocardiograma = el.idelectrocardiograma)
  10. where (c.fecha<='2015-01-31' and c.fecha>='2015-01-01' and c.estado='1')
  11. order by c.codigo;

esta consulta me muestra la mayoría de columnas correctamente, el problema es que no muestra un "DiagnosticoElectro" único para cada codigo del comprobante, sino que muestra a veces 2 para c/u, y ese es el problema, pues no toma la ultima fecha que supuestamente yo inclui en la consulta.
  #2 (permalink)  
Antiguo 29/04/2015, 09:10
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 18 años, 3 meses
Puntos: 774
Respuesta: Mostrar ultimo registro por fecha, Varias tablas involucradas

y si aqui pones:

Código MySQL:
Ver original
  1. select max(fecha_audita) from elec_detalle el where e.idelectrocardiograma = el.idelectrocardiograma group by el.idelectrocardiograma
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #3 (permalink)  
Antiguo 29/04/2015, 09:21
 
Fecha de Ingreso: abril-2015
Mensajes: 6
Antigüedad: 9 años, 6 meses
Puntos: 0
Respuesta: Mostrar ultimo registro por fecha, Varias tablas involucradas

hola amigo, gracias por responder, hice el cambio, pero los resultados son los mismos :S
  #4 (permalink)  
Antiguo 29/04/2015, 09:25
 
Fecha de Ingreso: abril-2015
Mensajes: 6
Antigüedad: 9 años, 6 meses
Puntos: 0
Respuesta: Mostrar ultimo registro por fecha, Varias tablas involucradas

[IMG]G:\LEZAMA CONSULTORES\problema electrocardiograma.png[/IMG]
asi es como se muestran algunos casos erroneos
  #5 (permalink)  
Antiguo 29/04/2015, 09:26
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Mostrar ultimo registro por fecha, Varias tablas involucradas

Ese es tu disco, estimado, o el de tu red. No podemos ver algo que esté en tu PC o en tu LAN.

Para psotear una imagen, súbela a un repositorio de acceso publico.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #6 (permalink)  
Antiguo 29/04/2015, 09:29
 
Fecha de Ingreso: abril-2015
Mensajes: 6
Antigüedad: 9 años, 6 meses
Puntos: 0
Respuesta: Mostrar ultimo registro por fecha, Varias tablas involucradas

bueno, ahi va la img:


pdsta.: y no puedo borrar una respuesta? :c

Última edición por jowil247; 29/04/2015 a las 09:42 Razón: agregar una imagen
  #7 (permalink)  
Antiguo 29/04/2015, 16:53
Avatar de giuli956  
Fecha de Ingreso: noviembre-2012
Mensajes: 149
Antigüedad: 12 años
Puntos: 1
Respuesta: Mostrar ultimo registro por fecha, Varias tablas involucradas

Entonces electrocardiograma se relaciona con su detalle elec_detalle y con paciente.
Para mi esta mal el orden de las tablas o deberia ser un right join aunque nunca use.
Entonces electrocardiograma left join paciente traeria los pacientes que tiene electrocardiograma y con otro left join con elec_detalle se muestran los detalles de estos electrocardiogramas.

Código MySQL:
Ver original
  1. select * from elec_detalle left join electrocardiograma on electrocardiograma.idelectrocardiograma= elect_detalle.idelectrocardiograma left join paciente on electrocardiograma.idpaciente=paciente.idpaciente limit 1 order by fecha desc;

Es igual que pasa para armar le detalle mensual de un cliente. se selecciona de la tabla detalleticket haciendo left join con ticket y luego con cliente.

Igual probalo
  #8 (permalink)  
Antiguo 29/04/2015, 17:04
 
Fecha de Ingreso: abril-2015
Mensajes: 6
Antigüedad: 9 años, 6 meses
Puntos: 0
Respuesta: Mostrar ultimo registro por fecha, Varias tablas involucradas

gracias por responder, la verdad ya había solucionado el problema de mostrar el último diagnostico para c/comprobante.
El error estaba en:
Código MySQL:
Ver original
  1. left join electrocardiograma e on p.idpaciente=e.idpaciente
lo cambié por:
Código MySQL:
Ver original
  1. left join electrocardiograma e on c.idcomprobante=e.idcomprobante
Pero ahora me surgió otro error, lo que pasa es que algunos comprobantes tienen 2 o más "idelectrocardiogramas", en realidad este error se presenta para solo un paciente, el cual tiene 2 electrocardiograma, pero en cuanto al diagnostico de c/u obviamente si lo muestra correcto, pero debería ser SOLO 1 electrocardiograma :S
  #9 (permalink)  
Antiguo 29/04/2015, 17:23
 
Fecha de Ingreso: abril-2015
Mensajes: 6
Antigüedad: 9 años, 6 meses
Puntos: 0
Respuesta: Mostrar ultimo registro por fecha, Varias tablas involucradas

muchas gracias a todos por responder.
Logré solucionarlo, dejo la solución si es que alguien más tiene el mismo problema:
Código MySQL:
Ver original
  1. c.fecha,
  2. c.idcomprobante,
  3. concat(p.apellidos, ' ', p.nombres),
  4. coalesce(if(el.bi='1', 'NORMAL', el.diagnostico), '-') as DiagnoElectro
  5. from comprobante c
  6. inner join paciente p on c.idpaciente=p.idpaciente
  7. left join electrocardiograma e on c.idcomprobante=e.idcomprobante
  8. and e.fecha_audita=(select max(fecha_audita) from electrocardiograma e where c.idpaciente=e.idpaciente)
  9. left join elec_detalle el on e.idelectrocardiograma = el.idelectrocardiograma
  10. and el.fecha_audita =(select max(fecha_audita) from elec_detalle el where e.idelectrocardiograma = el.idelectrocardiograma)
  11. where (c.fecha<='2015-01-31' and c.fecha>='2015-01-01' and c.estado='1')
  12. order by c.codigo;

para solucionar el último error que comenté, simplemente agregué otro "and" con la fecha de electrocardiograma.

Etiquetas: fecha, registro, select, tabla, tablas, ultimo
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 13:55.