SQL - La consulta trae mas datos de los que debería taer

   
Vista:
Imágen de perfil de Jonathan

La consulta trae mas datos de los que debería taer

Publicado por Jonathan (6 intervenciones) el 21/05/2014 17:34:26
Buen día,

Presento el siguiente problema estoy haciendo una consulta en una tabla que contiene el registro de entradas y salidas de personas por lo tanto necesito traer la hora mínima de entrada por día así como también la hora máxima de salida de esa persona durante el día, la consulta que estoy haciendo es la siguiente:

1
2
3
4
5
6
7
8
9
10
SELECT SUB.HOR_ENT,  MAX (CT.HOR_RELO)HOR_SAL, CT.FEC_SIST, CT.COD_EMPL, CT.RMT_SROF
  FROM NM_CTRRE CT, (SELECT  MIN (HOR_RELO)HOR_ENT, FEC_SIST, COD_EMPL FROM NM_CTRRE  WHERE TIP_MOVI = 'E' GROUP BY FEC_SIST, COD_EMPL ) SUB
 WHERE CONVERT(varchar(10), CT.FEC_SIST, 110) = CONVERT(varchar(10), SUB.FEC_SIST, 110)
   AND CT.COD_EMPL = SUB.COD_EMPL
   AND CT.COD_EMPL = 666666
   AND TIP_MOVI = 'S'
   AND CT.FEC_SIST >= '20140501'
   AND CT.FEC_SIST <=  '20140520'
GROUP BY SUB.HOR_ENT, CT.FEC_SIST, CT.COD_EMPL, CT.RMT_SROF
ORDER BY CT.FEC_SIST

adjunto esta los datos en la tabla.

Entonces cuando ejecuto esta consulta por ejemplo si una persona tuvo durante un día 5 ingresos y 4 salidas no me trae la primer hora de la entrada y la ultima de salida sino que me trae muchos otros datos.


Agradezco la colaboración que me puedan prestar en este caso ya que es urgente la solución,

saludos

Jonathan Velosa Ramirez
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

La consulta trae mas datos de los que debería taer

Publicado por Rafael rafael@reef-life.com.mx (83 intervenciones) el 21/05/2014 17:50:49
Hola:

Prueba con query tal que asi:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
SELECT SUB.HOR_ENT,
       CT.HOR_SAL ,
	   CT.FECHA   ,
	   CT.COD_EMPL,
	   CT.RMT_SROF
FROM  (SELECT MIN(HOR_RELO) AS HOR_SAL,
	          CONVERT(varchar(10), FEC_SIST, 110) AS FECHA,
			  COD_EMPL,
			  RMT_SROF
	   FROM   NM_CTRRE
	   WHERE  TIP_MOVI = 'S'
	   GROUP  BY CONVERT(varchar(10), FEC_SIST, 110)
	          , COD_EMPL
			  , RMT_SROF
	  ) SUB
      (SELECT MIN(HOR_RELO) AS HOR_ENT,
	          CONVERT(varchar(10), FEC_SIST, 110) AS FECHA,
			  COD_EMPL,
			  RMT_SROF
	   FROM   NM_CTRRE
	   WHERE  TIP_MOVI = 'E'
	   GROUP  BY CONVERT(varchar(10), FEC_SIST, 110)
	          , COD_EMPL
			  , RMT_SROF
	  ) SUB
WHERE CT.FECHA = SUB.FECHA
AND   CT.COD_EMPL = SUB.COD_EMPL
AND   CT.RMT_SROF = SUB.RMT_SROF
AND   CT.COD_EMPL = 666666
AND   CT.FEC_SIST >= '20140501'
AND   CT.FEC_SIST <= '20140520'

Y cuentanos como te fue 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
Imágen de perfil de Jonathan

La consulta trae mas datos de los que debería taer

Publicado por Jonathan (6 intervenciones) el 21/05/2014 19:51:10
Muchas gracias Rafael guiado en la consulta que me indicaste realice la siguiente la cual genere de manera correcta la información

1
2
3
4
5
6
7
8
9
SELECT MAX(HOR_RELO)HOR_SAL, MIN(HOR_RELO)HOR_ENT, CONVERT(date, FEC_SIST, 110) as FEC_SIST,
       COD_EMPL, RMT_SROF
  FROM NM_CTRRE
 WHERE TIP_MOVI IN ('E' , 'S')
   AND COD_EMPL = 79545352
   AND FEC_SIST >= '20100101'
   AND FEC_SIST <=  '20140521'
GROUP BY CONVERT(date, FEC_SIST, 110), COD_EMPL, RMT_SROF
ORDER BY FEC_SIST

Ahora el único problema que tengo es que esta consulta me sirva para todo tipo de motor ya que no solos e ejecutara desde sql server sino desde oracle y otras.
No se si tu conozcas la forma de hacerla genérica para todo tipo de motor, agradecería mucho esta informacion
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
Imágen de perfil de Isaias

La consulta trae mas datos de los que debería taer

Publicado por Isaias (690 intervenciones) el 22/05/2014 04:52:42
Cada motor tiene sus propios verbos de lenguaje, debes re-teclearla
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

La consulta trae mas datos de los que debería taer

Publicado por Rafael (83 intervenciones) el 22/05/2014 08:57:39
Para que funcione en Oracle el problema esta en las funciones propietarias:
1
2
3
4
5
6
7
8
9
10
11
12
SELECT MAX(HOR_RELO)HOR_SAL, MIN(HOR_RELO)HOR_ENT
                 , TO_CHAR(FEC_SIST, 'DD-MM-YYYY') as FEC_SIST
, COD_EMPL, RMT_SROF
FROM NM_CTRRE
 WHERE TIP_MOVI IN ('E' , 'S')
AND COD_EMPL = 79545352
AND FEC_SIST >= TO_DATE('20100101', 'YYYMMDD') 
AND FEC_SIST <= TO_DATE('20140521', 'YYYYMMDD')
GROUP BY
TO_CHAR(FEC_SIST, 'DD-MM-YYYY') as FEC_SIST,
COD_EMPL, RMT_SROF
ORDER BY FEC_SIST
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
Imágen de perfil de Jonathan

La consulta trae mas datos de los que debería taer

Publicado por Jonathan (6 intervenciones) el 22/05/2014 23:49:34
Si en definitiva es necesario hacer una consulta para cada tipo de motor :/ muchas gracias Rafael e Isaias
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