SQL - Mostrar reporte con última fecha de varias tablas

   
Vista:

Mostrar reporte con última fecha de varias tablas

Publicado por jowil (2 intervenciones) el 13/04/2015 04:16:36
Hola a toda la comunidad, verán, estoy haciendo una consulta que me muestra las personas atendidas en un mes determinado, lo malo es que hay exámenes en el cual la persona atendida cuenta con diferentes "diagnósticos" es por eso que para mostrar 1 SOLO DIAGNÓSTICO pensé en mostrar aquel que cuente con la última hora y/o fecha, esto ya que en todas las tablas de donde saco el dichoso diagnóstico cuentan con una columna así: "fecha" o si no "hora".

Este es mi código actual para la consulta:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
select distinct c.fecha,
e.descripcion,
f.descripcion as 'subcontrata',
case c.idtipo when 1 then 'PRE OCUPACIONAL'
when 2 then 'PERIODICO'
when 3 then 'RETIRO'
when 4 then 'VISITA'
when 5 then 'LEVANTAMIENTO'
when 7 then 'REUBICACION' end as 'Tipo de Evaluacion',
concat(p.apellidos, ' ', p.nombres),
ar.descripcion as area,
de.descripcion as departamento,
di.descripcion as division,
pu.descripcion as puesto,
r.uni_receptor as referencia,
of.diagnostico as diagnosticoOftal1,
of.diagno2 as diagnosticoOftal2,
of.diagno3 as diagnosticoOftal3,
ot.diagnostico as Otoscopico,
au.diagnostico as Audiologia,
case od.odonto when 1 then 'SANO DENTAL'
when 2 then 'CARIES DENTAL' end as 'Odontologico',
ra.diagnostico as RayosX,
inf.espiro as Espirometria,
m.diagnostico as MusculoEsqueletico,
j.diagnostico as 'Electrocardiograma',
if (t.imc <=18.5,'BAJO PESO',
 
      (if(t.imc between 18.4 and 24.99, 'NORMAL',
 
             (if(t.imc>=30, 'OBESIDAD',
               (if (t.imc>=25, 'SOBREPESO', 'NO EXAMEN')))
          )
         )
       )
 
) as Nutricion,
d.diag_1 as Dermatologia,
g.impresion_diagnostica_1 as Ginecologia,
ur.impresion_diagnostica_1 as Urologia,
inf.altura as Altura,
case cond.apto when 1 then 'APTO'
when 0 then 'NO APTO'  end as 'Conduccion',
case u.sueno11 when 1 then 'BAJO RIESGO'
when 2 then 'RIESGO MEDIO'
when 3 then 'RIESGO ALTO' end as 'SAS',
h.conclu_labo as Laboratorio,
idsubcargo
from empresa e
left join comprobante c on e.idempresa=c.idempresa
left join paciente p on c.idpaciente=p.idpaciente
left join empresa f on c.idsubcontrata=f.idempresa
left join area_ocupacional ar on ar.idarea_ocupacional=c.idcargo
left join departamento_ocu de on de.iddepartamento_ocu=c.iddepartamento
left join division_ocu di on di.iddivision_ocu=c.iddivision
left join puesto pu on pu.idpuesto=c.idsubcargo
left join referencia r on r.idpaciente=p.idpaciente
left join oftalmologia of on of.idpaciente=p.idpaciente
left join eval_audiometria ot on ot.idpaciente=p.idpaciente
left join auditoria_audiologia au on au.idpaciente=p.idpaciente
left join odontologia od on od.idpaciente=p.idpaciente
left join rayosx ra on ra.idpaciente=p.idpaciente
left join ugn_deteccion u on u.idpaciente=p.idpaciente
left join informe_medico inf on inf.idpaciente=p.idpaciente
left join hc h on h.idpaciente=p.idpaciente
left join musculo m on m.idpaciente=p.idpaciente
left join clinica_dermica d on d.idpaciente=p.idpaciente
left join ginecologia g on g.idpaciente=p.idpaciente
left join urologia ur on ur.idpaciente=p.idpaciente
left join triaje t on t.idpaciente=p.idpaciente
left join conduccion_barrick2 cond on cond.idpaciente=p.idpaciente
      inner join electrocardiograma elec
  on p.idpaciente=elec.idpaciente
      inner join elec_detalle j
  on elec.idelectrocardiograma=j.idelectrocardiograma
where ('2015-01-01' <= c.fecha AND c.fecha <= '2015-01-31');

Por ejemplo en ese mes, me muestra algo de 750 resultados, pero por ejemplo, si agrego un "and p.idpaciente='2311' " al where me muestra que ese paciente cuenta con 96 filas, cuando lo correcto sería solo 1, es por eso que busqué en cada tabla de cada examen y cada uno cuenta con una columna de fecha y/o hora, porque a veces es DATE o en algunos DATE TIME, este fue el resultado de mi búsqueda:

select uni_receptor from referencia r; --> REFERENCIA
select diagnostico from oftalmologia of; --> OFTALMOLOGÍA fecha_audita
select diagno2 from oftalmologia of; --> OFTALMOLOGÍA2
select diagno3 from oftalmologia of; --> OFTALMOLOGÍA3
select diagnostico from eval_audiometria ot; --> OTOSCÓPICO hora
select diagnostico from auditoria_audiologia au; --> AUDIOLOGÍA fecha_audita
select odonto from odontologia od; --> ODONTOLOGÍA registro_salida
select diagnostico from rayosx ra; --> NEUMOLÓGICO hora
select espiro from informe_medico inf; --> ESPIROMETRÍA fecha_audita
select diagnostico from musculo m; --> MUSCULO ESQUELÉTICO hora_registro
select diagnostico from elec_detalle j; --> ELECTROCARDIOGRAMA fecha_audita / electrocardiograma fecha_audita /
select imc from triaje t; --> NUTRICIÓN registro_salida
select diag_1 from clinica_dermica d; --> DERMATOLOGÍA
select impresion_diagnostica_1 from ginecologia g; --> GINECOLOGÍA fecha_audita
select impresion_diagnostica_1 from urologia ur; --> UROLOGÍA fecha_audita
select altura from informe_medico inf; --> ALTURA fecha_audita
select apto from conduccion_barrick2 cond; --> CONDUCCIÓN fecha_audita
select sueno11 from ugn_deteccion u; --> SAS hora_registro
select conclu_labo from hc h; --> LABORATORIO registro_inicio


Esas son las columnas para conseguir el último resultado del diagnóstico o el resultado del que yo necesito.
Espero me puedan ayudar, gracias de antemano.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de paulo

Mostrar reporte con última fecha de varias tablas

Publicado por paulo (4 intervenciones) el 18/05/2015 16:56:03
Buenas mi sugerencia es la siguiente hacer crear con into una las tablas afectadas al select aparte en un script, luego usar la funcion max con la ultima operacion y luego usar esas tablas auxiliares para hacer los join correspondientes asi tendras los ultimos resultados (dentro un un subselect)

podes tambien usar integration de sql server para generar los proyectos y divir los procesos, o usar procedimiento para generar tus tablas.


Espero que te sirva saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar