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

Ultimo y Primero en datos agrupados

Estas en el tema de Ultimo y Primero en datos agrupados en el foro de Mysql en Foros del Web. Buenos estoy haciendo un Query de una tabla que tengo de registros de control de acceso, la tabla "registro" contiene las siguientes columnas id, FECHA ...
  #1 (permalink)  
Antiguo 14/10/2011, 06:53
 
Fecha de Ingreso: marzo-2009
Mensajes: 41
Antigüedad: 15 años, 1 mes
Puntos: 1
Ultimo y Primero en datos agrupados

Buenos estoy haciendo un Query de una tabla que tengo de registros de control de acceso, la tabla "registro" contiene las siguientes columnas

id, FECHA (en DATETIME), puerta, id_empleado

y la tabla empleados

id, nombre, apellido, sexo


la idea es que me muestre separado por sexo y puerta el Nombre del primero y ultimo empleado por día.

Ahora la hora registrada esta en desorden, ya que varia según reloj del pórtico e incluso detecte que dentro del mismo pórtico aparecen desordenados, cosa que lo complica a un mas encontrar el ultimo y el primero para cada pórtico.

Como puedo hacer la consulta?? tengo el siguiente Query

Código MySQL:
Ver original
  1. SELECT YEAR(a.hora), MONTH( a.hora ), DAY(a.hora) , a.id_empleado , a.puerta, b.sexo, b.Nombre, b.apellido
  2. FROM registros AS a
  3. LEFT JOIN empleados AS b ON ( a.id_empleado = b.id )
  4. GROUP BY YEAR(a.hora), MONTH( a.hora ), DAY(a.hora) , a.puerta, b.sexo

Me da mas o menos lo que quiero, pero no me dice la ultima ni la primera persona y muchas veces no coinciden ni con el primero, razón por la cual me di cuenta que incluso el tiempo en pórtico esta desordenado, ya que si estuviera ordenado por tiempo me debería de dar por lo menos el primero.

Favor ayuda, para mi, usuario ocasional de MySQL, este problema me supero.
  #2 (permalink)  
Antiguo 14/10/2011, 09:02
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Respuesta: Ultimo y Primero en datos agrupados

No lo he probado

SELECT t1.hora, t1.puerta, t1.sexo, t1.Nombre, t1.apellido FROM (SELECT a.hora , a.id_empleado , a.puerta, b.sexo, b.Nombre, b.apellido
FROM registros AS a
INNER JOIN empleados AS b ON ( a.id_empleado = b.id ) ORDER BY a.hora DESC, a puerta, b.sexo)t1
GROUP BY DATE(t1.hora), t1.puerta, t1.sexo


Para los últimos por puerta, sería con orden ascendente
SELECT t1.hora, t1.puerta, t1.sexo, t1.Nombre, t1.apellido FROM (SELECT a.hora , a.id_empleado , a.puerta, b.sexo, b.Nombre, b.apellido
FROM registros AS a
INNER JOIN empleados AS b ON ( a.id_empleado = b.id ) ORDER BY a.hora ASC, a puerta, b.sexo)t1
GROUP BY DATE(t1.hora), t1.puerta, t1.sexo

Última edición por jurena; 14/10/2011 a las 14:19
  #3 (permalink)  
Antiguo 19/10/2011, 15:32
 
Fecha de Ingreso: marzo-2009
Mensajes: 41
Antigüedad: 15 años, 1 mes
Puntos: 1
Respuesta: Ultimo y Primero en datos agrupados

No me funciono como lo dices, metiro error de sintaxis de mysql, es extraño por que por separado funcinan los SELECT perfectamente, talves juntos de esa manera no.

me demore en contestar ya que lo resolví haciendo una función en php, con el segundo SELECT solo para que me entregase el resultado de el primero y el ultimo nombre para cada sexo y dia.

Pero eso fue una solución momentánea para el problema, ya que necesito que se haga atravez de una consulta de la bd y dejarlo establecido en el programa, no hay manera de mostrar en un resultado un campo de una consulta previa?? esta para cada registro??

estuve leyendo y vi las funciones IN y where con un slect, pero no logro entenderlas.

Favor ayuda. gracias

Etiquetas: agrupados, primero, query, registros, select, sql, tabla, ultimo
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 07:28.