Crear Consulta Access o SQL entre dos tablas

Necesito crear una consulta, me es indiferente si es con el modo diseño de access o en SQL.

Tengo 2 Tablas. 'Consultas' y 'Reabiertas', relacionadas entre si por un campo de ID

En la tabla 'Consultas' tengo los campos ID_Consulta , Fecha_Tratamiento y Hora_Fin

En la tabla 'Reabiertas' tengo los campos 'ID Consulta', Fecha_Reapertura y Hora_Reap

Los formatos son los lógicos. Numérico, de fecha y de hora.

Suponiendo que e elegido un solo registro de la tabla de 'Reabiertas'. Necesito una consulta que me devuelva el registro de la tabla 'Consultas' mas cercano en fecha y hora siempre y cuando sea anterior.

Por ejemplo. En Reabiertas tengo el siguiente registro:

-ID_Consulta: 1234

-Fecha_Reapertura: 25/10/2016

-Hora_Reap: 10:00:00

En 'Consultas' tengo tres registros

ID: 1234, 1234 y 1234

Fecha_Tratamiento; 25/10/2016 , 25/10/2016 y 25/10/2016

Hora_Fin: 8:00:00 , 9:00:00 y 10:30:00

La consulta tendria que devolverme el registro de:

ID: 1234

Fecha_Tratamiento: 25/10/2016

Hora_Fin: 9:00:00

Por si sirviera de ayuda la base consiste en un listado de casos reabiertos que han podido tratarse N veces antes de reabrirse y quiero saber cuando fue la última vez que se trató antes de esa reapertura.

1 respuesta

Respuesta
1

Prueba esta SQL para crear la consulta, a ver si te satisface:

SELECT TOP 1 Consultas.ID_Consulta, Consultas.Fecha_Tratamiento, Consultas.Hora_Fin
FROM Consultas INNER JOIN Reabiertas ON Consultas.ID_Consulta = Reabiertas.ID_Consulta
WHERE (((CDate([Fecha_Tratamiento] & " " & [Hora_Fin]))<CDate([Fecha_Reapertura] & " " & [Hora_Reap])))
ORDER BY CDate([Fecha_Tratamiento] & " " & [Hora_Fin]) DESC;

Un saludo


La consulta perfecta. Muchas gracias.

Ya seria perfecto si pudieras decirme como hacer referencia a campos, que en lugar de ser campos de la tabla 'Reabiertas' sean campos de un formulario cargado que se llama igual.

Esta sería la SQL, tendrás que cambiar donde pongo NombreDe... por el nombre que tu tengas:

SELECT TOP 1 Consultas.ID_Consulta, Consultas.Fecha_Tratamiento, Consultas.Hora_Fin
FROM Consultas INNER JOIN Reabiertas ON Consultas.ID_Consulta = Reabiertas.ID_Consulta
WHERE (((CDate([Fecha_Tratamiento] & " " & [Hora_Fin]))<CDate([Forms]![NombreDelFormulario]![NombreDelCuadroFecha] & " " & [Forms]![NombreDelFormulario]![NombreDelCuadroHora])))
ORDER BY CDate([Fecha_Tratamiento] & " " & [Hora_Fin]) DESC;

Y si también tienes el ID_Consulta en el formulario, y quieres consultar únicamente ese id:

SELECT TOP 1 Consultas.ID_Consulta, Consultas.Fecha_Tratamiento, Consultas.Hora_Fin
FROM Consultas 
WHERE Consultas.ID_Consulta=[Forms]![NombreDelFormulario]![NombreDelCuadroID] AND CDate([Fecha_Tratamiento] & " " & [Hora_Fin])<CDate([Forms]![NombreDelFormulario]![NombreDelCuadroFecha] & " " & [Forms]![NombreDelFormulario]![NombreDelCuadroHora])
ORDER BY CDate([Fecha_Tratamiento] & " " & [Hora_Fin]) DESC;

Si te da algún error sustituye [Forms] por [Formularios]

O también puedes abrir l consulta en vista diseño y usar el generador de expresiones en al fila de criterios para referenciar los campos del formulario

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas