SQL Server - SENTENCIA SQL

   
Vista:

SENTENCIA SQL

Publicado por lobonak (2 intervenciones) el 26/11/2010 18:14:14
Hola a todos,

necesito que me echeis una mano para ver si puedo solucionar un problema que tengo en la construccion de una consulta.

Tengo una tabla que tiene los campos USUARIO,NOMBRE,FECHA,INICIO todo NVARCHAR(250) en donde almaceno la fecha, el inicio y el fin de una sesion de un usuario.

Teneis alguna idea de como se podria obtener los registros para los cuales la diferencia entre INICIO sea de +3 minutos por ejemplo:

USER1 NOMBRE1 13/06/2010 13:03 *
USER1 NOMBRE1 13/06/2010 13:04
USER1 NOMBRE1 13/06/2010 13:05
USER1 NOMBRE1 13/06/2010 13:06 *
USER1 NOMBRE1 16/06/2010 13:03 *
USER1 NOMBRE1 13/06/2010 13:06 *

Los registros marcados con asterisco son los que quiero que me devuelva.

Además tiene un problema añadido, y es que los privilegios de la BD son de solo lectura....

Alguna idea??!

MUCHAS GRACIAS!!!!!
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

RE:SENTENCIA SQL

Publicado por Loría (56 intervenciones) el 26/11/2010 19:28:23
Buenas tardes lobonak.

No me queda claro que deseas comparar. Tu pusiste:

"Teneis alguna idea de como se podria obtener los registros para los cuales la diferencia entre INICIO sea de +3 minutos por ejemplo: "

¿Diferenencia entre INICIO y que? ¿Inicio de sesión y cierre de sesión? ¿Cómo sabemos nosotros para distinguir cuando es un inicio o un cierre?

Esperamos tus respuestas.

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

RE:SENTENCIA SQL

Publicado por Lobonak (2 intervenciones) el 27/11/2010 12:46:28
Hola Loría!

primero gracias por contestar!

La comparación es con el resto de los campos de INICIO para una misma fecha y un mismo usuario, es decir, no tenemos que distinguir si es inicio y fin, solo recuperar todos los usuarios, y para aquellos que se repita la fecha, solo recuperar aquellos en los cuales la diferencia de minutos sea de +3.

Para el ejemplo que puse:
USER1 NOMBRE1 13/06/2010 13:03 *
USER1 NOMBRE1 13/06/2010 13:04 -> No porque el tiempo es <3 frente al 13:03
USER1 NOMBRE1 13/06/2010 13:05 ->Igual que el anterior
USER1 NOMBRE1 13/06/2010 13:06 *
USER1 NOMBRE1 16/06/2010 13:03 * ->Este si porque la fecha es distinta
USER1 NOMBRE1 13/06/2010 13:06 * ->Misma fecha que el anterior pero +3min
USER2 NOMBRE2 13/06/2010 13:06 * ->Nombre distinto

Espero exlicarme bien!

Muchas gracias!!!
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

RE:SENTENCIA SQL

Publicado por Loría (56 intervenciones) el 29/11/2010 06:22:48
Creo que si te has explicado.

Basado en lo que me has dicho, he creado el siguiente SQL. Creé una tabla propia llamada "subqueries" y he ingresado los datos que me has pasado. Al menos este SQL me devuelve los registros que cumplen con el criterio de ser 3 o más minutos mayores al registro con el valor más bajo (Ojo: con el valor más bajo). Me ha quedado así.

SELECT s.*
FROM subqueries s
WHERE s.hora >=
(
SELECT DATEADD(minute,3,MIN(hora))
FROM dbo.subqueries i
WHERE s.usuario = i.usuario AND s.fecha = i.fecha
GROUP BY usuario, fecha
)

Si la tabla tiene lo que me pasaste:

1 User1 2010-06-13 00:00:00.000 2010-11-28 13:03:00.000
2 User1 2010-06-13 00:00:00.000 2010-11-28 13:04:00.000
3 User1 2010-06-13 00:00:00.000 2010-11-28 13:05:00.000
4 User1 2010-06-13 00:00:00.000 2010-11-28 13:06:00.000
5 User1 2010-06-16 00:00:00.000 2010-11-28 13:03:00.000
6 User1 2010-06-13 00:00:00.000 2010-11-28 13:06:00.000
7 User2 2010-06-13 00:00:00.000 2010-11-28 13:06:00.000

Devuelve lo siguiente:

4 User1 2010-06-13 00:00:00.000 2010-11-28 13:06:00.000
6 User1 2010-06-13 00:00:00.000 2010-11-28 13:06:00.000

Me quedó la duda si deseas que se valide cada registro que posea algún otro registro con 3 minutos de diferencia. Ojo que yo solo tomo como referencia el más bajo. Si es así creo que habrá que armarlo diferente, pero es que no me quedó claro ese punto, y hacerlo con esta validación es un poquito más complejo.

Espero esto sea lo que necesitas, o te sirva de referencia para crear uno más elaborado.

Saludos.

Loría.
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