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
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
0