SQL - Consulta que seleccione registro con fecha más reciente

 
Vista:

Consulta que seleccione registro con fecha más reciente

Publicado por Alex6 (3 intervenciones) el 13/11/2018 08:47:59
Hola foreros:
Tengo un problema con una consulta que no puedo solucionar. No soy un experto en SQL, y llevo ya unos días rompiéndome la cabeza con esto sin solución. Si alguien pude ayudarme, lo agradeceré mucho.
La cosa es que tengo una tabla de aplicaciones y otra de logs generados por cambios de estado de estas aplicaciones. Quiero obtener un registro por cada aplicación con su último log. Para ello comparo el estado actual de la aplicación con el "nuevo" estado de los logs y en teoría esto debería resultar. Sin embargo, sucede que las aplicaciones pasan muchas veces por los mismos estados así que este criterio me devuelve múltiples registros por cada aplicación. Como en los logs tengo un campo fecha, la solución podría ser quedarse con el registro que tiene la fecha más reciente, pero soy incapaz de lograrlo.
Pongo una simplificación de las tablas, que tienen una relación uno a muchos:

Tabla Aplicacion
-oid
-status
-appName
-version
-tipo

Tabla AppLogs
-oid
-aplicacion_oid
-date
-oldStatus
-newStatus
-comments

La consulta que tengo y que devuelve múltiples registros por aplicación para esta simplificación sería algo así:

SELECT *
FROM Aplicacion LEFT OUTER JOIN AppLogs ON Aplication.oid=AppLogs.aplicacion_oid
WHERE Aplicacion.status=AppLogs.newStatus

¿Cómo obtengo sólo un registro por aplicación con su último log?

Saludos y muchas gracias por su tiempo.
Alex
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
sin imagen de perfil
Val: 22
Ha aumentado su posición en 3 puestos en SQL (en relación al último mes)
Gráfica de SQL

Consulta que seleccione registro con fecha más reciente

Publicado por Ana (11 intervenciones) el 13/11/2018 17:23:25
Hola Alex6,

¿Porque en el where relaccionas el status?

No sería mejor relaccionar por el oid?

Where Aplicacion.oid = AppLogs.aplicacion_oid

Es que no se como está relaccionado.

Un saludo

Ana
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

Consulta que seleccione registro con fecha más reciente

Publicado por Alex6 (3 intervenciones) el 14/11/2018 09:44:00
Hola Ana:
Primero muchas gracias por tomarte tiempo para leer y responder mi post. La respuesta a tu pregunta está en el texto de eplicación antes de la consulta, específicamente en esta parte "Quiero obtener un registro por cada aplicación con su último log. Para ello comparo el estado actual de la aplicación con el "nuevo" estado de los logs y en teoría esto debería resultar." O sea, como quiero que se muestre la información de la aplicación con la descripción del último log, comparo el estado actual de la misma con el nuevo estado del log. Esta es quizás la raiz del problema porque ese campo newStatus puede contener el valor del estado actual de la aplicación varias veces en los logs.
Espero haberme explicado bien... :-)
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
sin imagen de perfil
Val: 22
Ha aumentado su posición en 3 puestos en SQL (en relación al último mes)
Gráfica de SQL

Consulta que seleccione registro con fecha más reciente

Publicado por Ana (11 intervenciones) el 14/11/2018 16:46:16
Hola,

Y si pruebas con esto?

SELECT *
FROM Aplicacion
LEFT OUTER JOIN AppLogs ON Aplication.oid=AppLogs.aplicacion_oid AND
AppLogs.Date = (SELECT MAX(AL.Date)
FROM AppLog AL
WHERE AL.newStatus = Aplication.status)
WHERE Aplicacion.status=AppLogs.newStatus

Un saludo

Ana
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

Consulta que seleccione registro con fecha más reciente

Publicado por Alex6 (3 intervenciones) el 15/11/2018 13:13:55
Hola Ana:
Gracias por la respuesta. He probado lo que me dices y me devuelve los mismos registros que la consulta original... Sigo sin ideas...
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