Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » SQL Server »

Consulta con WHERE y DATEDIFF complejo

Estas en el tema de Consulta con WHERE y DATEDIFF complejo en el foro de SQL Server en Foros del Web. Hola a todos, Necesito programar una consulta que descarte los registros de acceso de una serie de usuarios, que no superen un margen de tiempo ...
  #1 (permalink)  
Antiguo 25/02/2013, 05:40
 
Fecha de Ingreso: julio-2008
Mensajes: 6
Antigüedad: 15 años, 8 meses
Puntos: 0
Pregunta Consulta con WHERE y DATEDIFF complejo

Hola a todos,

Necesito programar una consulta que descarte los registros de acceso de una serie de usuarios, que no superen un margen de tiempo predeterminado (por ej. 2 segundos). Es decir, si cada registro se ha realizado por un usuario en una fecha/hora determinada, no quiero obtener aquellos que su fecha/hora no superen el margen establecido en relación a la fecha/hora del registro anterior. Creo que con un ejemplo se ve más claro.

Ejemplo:

LogIndex, IDUsuario, Fecha/Hora

1, 01551, 20/02/2013 17:41:45.000
2, 01551, 20/02/2013 17:41:45.900 *
3, 01551, 20/02/2013 17:41:46.150 *
4, 01551, 20/02/2013 20:41:47.000

5, 01552, 20/02/2013 17:42:45.000
6, 01552, 20/02/2013 17:42:46.000 *
7, 01552, 20/02/2013 19:45:45.000

*: Registros a descartar porque a fecha/hora no supera el margen de 2 segundos respecto al registro anterior. En el primer caso debería descartar dos registros porque los dos no superan este margen.


Aquí tenéis el código que crea la tabla temporal y añade los registros anteriores para poder hacer pruebas:

CREATE TABLE #TEMP(LogIndex int, UserID nvarchar(10), logtime datetime)

insert into #TEMP select 1, '01551', '20/02/2013 17:41:45.000'
insert into #TEMP select 2, '01551', '20/02/2013 17:41:45.900'
insert into #TEMP select 3, '01551', '20/02/2013 17:41:46.150'
insert into #TEMP select 4, '01551', '20/02/2013 20:41:47.000'
insert into #TEMP select 5, '01552', '20/02/2013 17:42:45.000'
insert into #TEMP select 6, '01552', '20/02/2013 17:42:46.000'
insert into #TEMP select 7, '01552', '20/02/2013 19:45:45.000'

select * from #TEMP

DROP TABLE #temp

Gracias de antemano.
  #2 (permalink)  
Antiguo 25/02/2013, 09:13
 
Fecha de Ingreso: julio-2012
Ubicación: Israel
Mensajes: 360
Antigüedad: 11 años, 9 meses
Puntos: 40
Respuesta: Consulta con WHERE y DATEDIFF complejo

Intenta así:
Código SQL:
Ver original
  1. SELECT  *
  2. FROM    (SELECT * ,
  3.                 MIN(LogTime) OVER(Partition BY UserID) MinTime
  4.         FROM    #TEMP) T
  5. WHERE   LogTime=MinTime OR DateDiff(SECOND,MinTime,LogTime)>2;
__________________
El Castellano no es mi lengua materna: discúlpenme por los errores gramaticales.
Mi blog
  #3 (permalink)  
Antiguo 26/02/2013, 03:00
 
Fecha de Ingreso: julio-2008
Mensajes: 6
Antigüedad: 15 años, 8 meses
Puntos: 0
Respuesta: Consulta con WHERE y DATEDIFF complejo

Gracias! Le doy una ojeada y te cuento!

Etiquetas: complejo, datediff, registro, select, tabla
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 08:00.