Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   MySQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=21)
-   -   Mostrar ultimo registro por fecha. Varias tablas involucradas. (https://www.clubdelphi.com/foros/showthread.php?t=88212)

jowil247 29-04-2015 23:42:00

Mostrar ultimo registro por fecha. Varias tablas involucradas.
 
Hola comunidad, verán, tengo 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 SQL [-]
select distinct
c.fecha,
c.codigo,
concat(p.apellidos, ' ', p.nombres),
coalesce(if(bi='1', 'NORMAL', diagnostico), '-') as DiagnosticoElectro
from comprobante c
inner join paciente p on c.idpaciente=p.idpaciente
left join electrocardiograma e on p.idpaciente=e.idpaciente
left join elec_detalle el on e.idelectrocardiograma = el.idelectrocardiograma
and el.fecha_audita =(select max(fecha_audita) from elec_detalle el where e.idelectrocardiograma = el.idelectrocardiograma)
where (c.fecha<='2015-01-31' and c.fecha>='2015-01-01' and c.estado='1')
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.

giulichajari 30-04-2015 00:35:48

Prueba ejecutar la consulta en el motor de base de datos antes de hacerlo en delphi, especialmente prueba la consulta en cuestion que es una parte de esa.

Código SQL [-]
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;


Para mostrar el ultimo puede emplear limit 1 y debe ser orden descendiente de la fecha.

jowil247 30-04-2015 01:20:10

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 SQL [-]
left join electrocardiograma e on p.idpaciente=e.idpaciente
lo cambié por:
Código SQL [-]
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


La franja horaria es GMT +2. Ahora son las 04:52:04.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi