Java y BBDD

Maria
22 de Octubre del 2003
hola,

tengo una pequeña duda, a ver si se puede realizar esto.
Tengo una tabla que contiene datos médicos. En esta tabla hay dos campos importantes.
Fecha
Tipo (especifico si es fecha ingreso o fecha alta).

Es decir, solo tengo un campo para la fecha pero con el tipo puedo especificar si es alta o ingreso.
Como puedo hacer para que me salga por pantalla la fecha de ingreso más antigua y la fecha de alta más nueva??
es decir, necesito saber cuando fue el primer ingreso de un paciente y cuando salió por ultima vez. Muchas gracias

Mario Lavarreda
22 de Octubre del 2003
Bueno en SQL normal seria ......
codigopaciente=0001

select mn.fecha,mx.fecha
from datosMed mn,datosMed mx
where mx.codigo="0001"
and mx.codigo=mn.codigo
and mn.fecha in (Select min(fecha) from datosMed where tipo="Ingreso" and codigo="0001")
and mx.fecha in (Select max(fecha) from datosMed where tipo="Salida" and codigo="0001")



Maria
22 de Octubre del 2003
Perdona, pero creo que me he explicado mal
estoy hablando de una tabla que contiene 2 campos
tipo y fecha. No hay dos tablas como tu especificas, me podrias especificar como se haría, gracias!

Mario Lavarredq
22 de Octubre del 2003
Bueno si solo tienes dos datos....
como sabes a que paciente pertenecen esas fechas?
sino no tienes codigo o nombre?
o solo lo haces sobre un paciente?
y no no estoy refieriendome a dos tablas...
es la misma...
pero la acceso dos veces...
para que te devuelva dos fechas...
la primera primer ingreso y la segunda el ultimo
egreso...
bueno respondeme las preguntas anteriores y con gusto te ayudo..

Maria
22 de Octubre del 2003
A ver, no solo tengo dos campos en la tabla que conste, pero los que me dan problemas son estos.

Yo quiero hacer un select que me retorne la fecha de ingreso mas "vieja" y la fecha de alta "mas nueva". Es decir, tengo que hacer un max y un min pero teniendo en cuenta el tipo (si es ingreso o alta)
...
por eso no veo clara tu sentencia, utilizas dos tablas y me lío.
Si me puedes ayudar te lo agradeceria!

Mario Lavarreda
22 de Octubre del 2003
Bueno........
No son dos tablas...
es la misma pero la nombro dos veces...
eso es porque vamos a pedir el mismo campo dos veces...
"FECHA"
pero queremos dos datos distintos min y max
entonces hago ...

select mn.fecha,mx.fecha
from datosMed mn,datosMed mx
where
and mn.fecha in (Select min(fecha) from datosMed where tipo="Ingreso")
and mx.fecha in (Select max(fecha) from datosMed where tipo="Salida")

este query te va a devlover dos datos...
el primero la fecha mas antigua sobre el "ingreso"...
y el segundo la fecha mas reciente de "egreso"
pero sobre todos los datos de la tabla...
no sobre un paciente en especifico...

Mario Lavarreda
22 de Octubre del 2003
Perdon hay un error es...

select mn.fecha,mx.fecha
from datosMed mn,datosMed mx
where
mn.fecha in (Select min(fecha) from datosMed where tipo="Ingreso")
and mx.fecha in (Select max(fecha) from datosMed where tipo="Salida")

Maria
22 de Octubre del 2003
Okis! esto parece que funciona, pero que pasa si o bien la fecha de ingreso o bien la fecha de alta estan vacias?

Mario Lavarreda
22 de Octubre del 2003
Bueno si estan vacias..... o nulas
no las toma en cuenta ...
porque no son fechas validas........
en eso no hay problema ...
me imagino que hay un momento durante el proceso
de tu aplicacion en la que cualesquiera de esas dos fechas estan vacias...
pero eso no importa ...
solo te saca o valida los valores llenos....
solo que acuerdate que me habias dicho que lo querias hacer por paciente....
entonces deberias agregar en el query...
el codigo o el nombre de tu paciente...
para que te retorne los datos en base a un paciente especifico...


Maria
22 de Octubre del 2003
Lo he probado y la query no me retorna nada si una de las dos fechas esta vacía, como se puede arreglar tal situación?

Mario Lavarreda
22 de Octubre del 2003
//Prueba esto
select mn.fecha,mx.fecha
from datosMed mn,datosMed mx
where
(mn.fecha in (Select min(fecha) from datosMed where tipo="Ingreso")
or mn.fecha is null)
and (mx.fecha in (Select max(fecha) from datosMed where tipo="Salida") or mx.fecha is null)

Maria
22 de Octubre del 2003
no va ninyo!!! me dan los dos campos en blanco cuando es erroneo, porque existe uno de los dos, buaa!!!

Mario Lavarreda
22 de Octubre del 2003
Tenes toda la razon...
me equivoque...
que puedo decir soy mortal..
pero este no falla...
habia que darle un UNION......


select mn.fecha as ingreso ,' ' as egreso
from datosMed mn
where
mn.fecha in (Select min(fecha) from datosMed where tipo="Ingreso")
UNION select '' as ingreso ,mx.fecha as egreso
from datosMed mx
where
mx.fecha in (Select max(fecha) from datosMed where tipo="Salida");

Maria
22 de Octubre del 2003
ei!! que no pasa nada eh!! lo que pasa es que comienzo a estar desesperada, se me esta rebotando esta query...por cierto, voy a probarla y te cuento, oka?

Maria
22 de Octubre del 2003
si que hay problema, que si una de las dos fechas esta vacía la consulta no me retorna nada.

Y yo deseo que me retorne la minima y la maxima, y si no pueden ser las dos pues por lo menos alguna de las dos.