Oracle - Obtener tiempo de logueo de un usuario

 
Vista:

Obtener tiempo de logueo de un usuario

Publicado por Gonzalo (6 intervenciones) el 14/04/2015 19:47:46
Hola a todos,

Estoy confeccionando una consulta para mi aplicacion, desde un log necesito sacar el tiempo de sesión logueado de cada usuario teniendo que un usuario inicia sesion y cierra sesion desde cualquier equipo y a cualquier momento del dia.

Tengo los siguientes datos:
Fecha Equipo Usuario Accion Sesion
01/01/2015 10:00 1 Fer Inicio 129
01/01/2015 10:00 1 Fer Cierre 129
01/01/2015 10:00 2 Fer Inicio 130
01/01/2015 10:00 2 Fer Cierre forzado 0
01/01/2015 10:00 2 Fer Inicio 131
01/01/2015 10:00 2 Fer Cierre 131
01/01/2015 10:00 2 Pepe Inicio 132
01/01/2015 10:00 3 Jorge Inicio 133
01/01/2015 10:00 2 Pepe Cierre 132
01/01/2015 10:00 3 Jorge Cierre forzado 0

Cabe destacar que existe un numero de sesion pero cuando se cierra forzadamente no se obtiene el numero de sesión entonces no se puede saber a que sesion pertenece.

Podrían ayudarme???

Mi prueba fue la siguiente (pero falla ya que el cierre forzado no tiene numero de sesion):


Select Logins.usuario, Logins.sesion, login, logout, NUMTODSINTERVAL (logout - login, 'DAY') Tiempo

FROM

(Select usuario, sesion, MIN(fecha) Login
FROM
(Select usuario, sesion, fecha, Accion
FROM tabla1
WHERE Accion='Cierre' OR Accion='Cierre Forzado'
Order by usuario ASC, equipo ASC, fecha ASC) Log
Group by usuario,sesion) Logins,

(Select usuario, sesion, MIN(fecha) Logout
FROM
(Select usuario, sesion, fecha, Accion
FROM tabla1
WHERE Accion='Cierre' OR Accion='Cierre Forzado'
Order by usuario ASC, equipo ASC, fecha ASC) Log
Group by usuario, sesion) Logouts

where Logins.sesion = Logouts.sesion
and Logins.usuario = Logouts.usuario

ORDER BY Tiempo DESC




Para sacar el numero de sesión hice la siguiente prueba:

Select fecha, usuario, equipo, sesion, accion,
LAG(sesion,1,0) OVER (Order by usuario ASC, equipo ASC, fecha ASC) AS sesjonanterior
FROM
(Select * From tabla1
where accion='Login' or accion='Cierre' or accion='Cierre forzado')

GRACIAS DESDE YA!
ESPERO SUS COMENTARIOS, me ayudaran mucho porque tengo que terminar esto y no puedo hacerlo
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: 499
Oro
Ha mantenido su posición en Oracle (en relación al último mes)
Gráfica de Oracle

Obtener tiempo de logueo de un usuario

Publicado por Rafael (328 intervenciones) el 23/04/2015 09:12:56
El problema lo veo con el "CIERRE FORZADO" ya que segun pones la sesion se hace 0...
Si puedo suponer que la sesion mantiene el numero a pesar de ser forzado el query seria algo similar a esto

1
2
3
4
5
6
7
8
9
10
11
12
13
SELECT SESION
     , USUARIO
     , LOGIN
     , LOGOUT
     , NUMTODSINTERVAL (LOGOUT - LOGIN, 'DAY') TIEMPO
FROM (
      SELECT SESION
           , USUARIO
           , MAX(CASE WHEN ACCION = 'Inicio' THEN FECHA ELSE NULL END) LOGIN
           , MAX(CASE WHEN ACCION = 'Inicio' THEN NULL ELSE FECHA END) LOGOUT
      FROM TABLA1
      GROUP BY SESION, USUARIO
      );

Insisto si el cierre es forzado y pone sesion 0 esto no va a funcionar...

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

Obtener tiempo de logueo de un usuario

Publicado por Gonzalo (6 intervenciones) el 24/04/2015 18:14:31
Gracias por tu respuesta Rafael!
El problema es que si es forzado la sesion es 0 :(

Eso es lo que mas me cuesta lograrlo en la consulta, a ti no se te ocurre la forma entonces? :(
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