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

Cómo obtener la primera y la utlimo registros

Estas en el tema de Cómo obtener la primera y la utlimo registros en el foro de SQL Server en Foros del Web. hola a todos tengo una consulta en sql el cual me devuelve todas las entradas y salidas de todos empleados. pero quisiera que solo de ...
  #1 (permalink)  
Antiguo 14/08/2017, 14:56
 
Fecha de Ingreso: abril-2015
Mensajes: 130
Antigüedad: 9 años
Puntos: 0
Cómo obtener la primera y la utlimo registros

hola a todos tengo una consulta en sql el cual me devuelve todas las entradas y salidas de todos empleados.

pero quisiera que solo de devuelva la primera entrada y la ultima salida de todos los empleados.

esta es mi consulta

Código:
select FirstName as 'Nombre',LastName as 'Apellido',description as 'entrada',
CONVERT(VARCHAR(10),TimeStamp_Server,103) AS Fecha, 
		RIGHT(TimeStamp_Server, 7) AS Hora  from Message
where Description = 'Torniquete Entrada'
order by fecha
  #2 (permalink)  
Antiguo 14/08/2017, 15:45
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: Cómo obtener la primera y la utlimo registros

No tengo tus datos pero viendo las columnas de tus tablas podrias hacer algo como esto:

Código SQL:
Ver original
  1. SELECT * FROM(
  2. SELECT firstname, lastname, description, MIN(TimeStamp_Server) AS hora_entrada FROM
  3. tabla GROUP BY firstname, lastname, description WHERE description='Entrada') AS t1
  4. LEFT JOIN
  5. (
  6. SELECT firstname, lastname, description, MAX(TimeStamp_Server) AS hora_salida FROM
  7. tabla GROUP BY firstname, lastname, description WHERE description='salida'
  8. ) AS t2 ON (t1.firstname=t2.firstname AND t1.lastname=t2.lastname)

Ahora como te digo desconozco los datos, asi que faltaria saber si la consulta la quieres por dia, de ser asi faltaria filtrar de que solo regrese informacion para un dia.
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #3 (permalink)  
Antiguo 14/08/2017, 15:58
 
Fecha de Ingreso: abril-2015
Mensajes: 130
Antigüedad: 9 años
Puntos: 0
Respuesta: Cómo obtener la primera y la utlimo registros

si de hecho lo requiero por día, solo que tu consulta no me regresa el nombre del empleado
Cita:
SELECT * FROM(
SELECT firstname, lastname, description, MAX(TimeStamp_Server) AS hora_entrada FROM
Message GROUP BY firstname, lastname, description) AS t1
LEFT JOIN
(
SELECT firstname, lastname, description, MAX(TimeStamp_Server) AS hora_salida FROM
Message GROUP BY firstname, lastname, description)
AS t2 ON (t1.firstname=t2.firstname AND t1.lastname=t2.lastname)

Última edición por antonio_dsanchez; 14/08/2017 a las 16:04
  #4 (permalink)  
Antiguo 14/08/2017, 17:17
 
Fecha de Ingreso: julio-2012
Ubicación: Israel
Mensajes: 360
Antigüedad: 11 años, 9 meses
Puntos: 40
Respuesta: Cómo obtener la primera y la utlimo registros

Intentaría así:
Código SQL:
Ver original
  1. SELECT  FirstName,
  2.     LastName,
  3.     CAST(Fecha AS DATE) Fecha,
  4.     MIN(Iif(Description='Entrada',TimeStamp_Server,'29991231'))  PrimeraEntrada,
  5.     MAX(Iif(Description='Salida',TimeStamp_Server,'19000101'))  UltimaSalida
  6. FROM    Message
  7. GROUP BY FirstName,
  8.     LastName,
  9.     CAST(Fecha AS DATE);
__________________
El Castellano no es mi lengua materna: discúlpenme por los errores gramaticales.
Mi blog
  #5 (permalink)  
Antiguo 15/08/2017, 07:12
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: Cómo obtener la primera y la utlimo registros

Cita:
Iniciado por antonio_dsanchez Ver Mensaje
si de hecho lo requiero por día, solo que tu consulta no me regresa el nombre del empleado
Te comente que no conozco los datos de tu tabla, use las columnas que pusiste en tu query, te falta algun dato, agregalo a la consulta y listo......
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #6 (permalink)  
Antiguo 15/08/2017, 08:37
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 16 años, 9 meses
Puntos: 180
Respuesta: Cómo obtener la primera y la utlimo registros

Yo te di una respuesta en LWDP

Código SQL:
Ver original
  1. -- Datos en tabla de entrada
  2.  
  3. --id  group   val   start   end
  4.  
  5. --1   10      36    465     89
  6.  
  7. --2   10      35    55      11
  8.  
  9. --3   10      34    20      456
  10.  
  11. --4   20      38   1140     1177
  12.  
  13. --5   20      22    566     788
  14.  
  15. --6   20      1235  789     4796
  16.  
  17. --7   20      7894  741     1067
  18.  
  19.  
  20.  
  21. -- Resultado deseado
  22.  
  23. --id  group   val   start   end
  24.  
  25. -- 1   10      36    465     89
  26.  
  27. -- 3   10      34    20      456
  28.  
  29. -- 4   20      38   1140     1177
  30.  
  31. -- 7   20      7894  741     1067
  32.  
  33.  
  34.  
  35. DROP TABLE #test
  36.  
  37. CREATE TABLE #test ([id] INT, [GROUP] INT, [val] INT, [START] INT, [END] INT)
  38.  
  39. INSERT INTO #test VALUES(
  40.  
  41. 1   ,10      ,36    ,465     ,89),
  42.  
  43. (2   ,10      ,35    ,55      ,11),
  44.  
  45. (3   ,10      ,34    ,20      ,456),
  46.  
  47. (4   ,20      ,38   ,1140     ,1177),
  48.  
  49. (5   ,20      ,22   ,566     ,788),
  50.  
  51. (6   ,20      ,1235  ,789     ,4796),
  52.  
  53. (7   ,20      ,7894  ,741     ,1067)
  54.  
  55.  
  56.  
  57.  
  58.  
  59. WITH Cte AS(
  60.  
  61.     SELECT *,
  62.  
  63.         RnAsc = ROW_NUMBER() OVER(PARTITION BY [GROUP] ORDER BY val),
  64.  
  65.         RnDesc = ROW_NUMBER() OVER(PARTITION BY [GROUP] ORDER BY val DESC)
  66.  
  67.     FROM #test
  68.  
  69. )
  70.  
  71. SELECT
  72.  
  73.     id, [GROUP], val, START, [END]
  74.  
  75. FROM Cte
  76.  
  77. WHERE
  78.  
  79.     RnAsc = 1 OR RnDesc = 1
  80.  
  81. ORDER BY [GROUP], val
__________________
MCTS Isaias Islas

Etiquetas: consulta+sql, query, sql
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 13:24.