Consulta rara
Tengo dos tablas: Empleados y Cronos relacionadas por numero de tarjeta.
La tabla cronos tiene un campo llamado Comando cuya datos pueden variar de 11 a 21, donde 11 es entrada y 21 es salida. Para ambos casos tengo que usar MIN y MAX ya que en un mismo dia tengo varias entradas y salidas pero solo me sirve la primera entrada y la ultima salida.
Tabla Personal con los campos:
Tarjeta Apellido
3 Perez
4 Gonzalez
Tabla Cronos
Comando Tarjeta Fecha Hora
11 3 2007/12/01 09:00:00
21 3 2007/12/01 12:30:00
11 3 2007/12/01 14:00:00
21 3 2007/12/01 18:00:00
Como veran en un mismo dia tiene varias entradas y salidas.
Mediante una consulta logro agrupar por fecha y que me arroje la hora minima y en otra consulta la hora maxima.
SELECT cronos.Tarjeta, personal.Apellido, cronos.Fecha, MIN(cronos.hora)
FROM personal INNER JOIN cronos ON personal.tarjeta = cronos.Tarjeta
WHERE cronos.Comando=11
GROUP BY cronos.Tarjeta,cronos.Fecha
ORDER BY cronos.Tarjeta, cronos.fecha
Pero lo que necesito es me me muestre lo siguiente:
[codigo]Tarjeta Nombre Fecha Hora Entrada Hora Salida
3 Perez 2007/12/01 09:00:00 18:00:00 [/codigo]
Espero que puedan ayudarme... o al menos decirme si es posible
Gracias
La tabla cronos tiene un campo llamado Comando cuya datos pueden variar de 11 a 21, donde 11 es entrada y 21 es salida. Para ambos casos tengo que usar MIN y MAX ya que en un mismo dia tengo varias entradas y salidas pero solo me sirve la primera entrada y la ultima salida.
Tabla Personal con los campos:
Tarjeta Apellido
3 Perez
4 Gonzalez
Tabla Cronos
Comando Tarjeta Fecha Hora
11 3 2007/12/01 09:00:00
21 3 2007/12/01 12:30:00
11 3 2007/12/01 14:00:00
21 3 2007/12/01 18:00:00
Como veran en un mismo dia tiene varias entradas y salidas.
Mediante una consulta logro agrupar por fecha y que me arroje la hora minima y en otra consulta la hora maxima.
SELECT cronos.Tarjeta, personal.Apellido, cronos.Fecha, MIN(cronos.hora)
FROM personal INNER JOIN cronos ON personal.tarjeta = cronos.Tarjeta
WHERE cronos.Comando=11
GROUP BY cronos.Tarjeta,cronos.Fecha
ORDER BY cronos.Tarjeta, cronos.fecha
Pero lo que necesito es me me muestre lo siguiente:
[codigo]Tarjeta Nombre Fecha Hora Entrada Hora Salida
3 Perez 2007/12/01 09:00:00 18:00:00 [/codigo]
Espero que puedan ayudarme... o al menos decirme si es posible
Gracias
No resulta demasiado difÃcil: Tienes que hacer en realidad dos INNER JOIN (aunque yo supongo que funcionarÃa con uno sólo) de este tipo:
SELECT TARJETA, NOMBRE, FECHA, INGRESO as 'HORA ENTRADA', EGRESO as 'HORA SALIDA' FROM (SELECT TARJETA, FECHA, MAX(A.FECHAHORA) as EGRESO, MIN(B.FECHAHORA) as INGRESO FROM CRONOS as A INNER JOIN CRONOS as B USING(TARJETA,FECHA) GROUP BY TARJETA) as C INNER JOIN PERSONAL USING (TARJETA);
Yo supongo que una simple:
SELECT TARJETA, NOMBRE, FECHA, MIN(A.HORA) as 'HORA ENTRADA', MAX(A.HORA) as 'HORA SALIDA' FORM CRONOS as A INNER JOIN PERSONAL USING(TARJETA,FECHA) GROUP BY TARJETA;
deberÃa funcionar. Al menos lo he visto funcionar.
SELECT TARJETA, NOMBRE, FECHA, INGRESO as 'HORA ENTRADA', EGRESO as 'HORA SALIDA' FROM (SELECT TARJETA, FECHA, MAX(A.FECHAHORA) as EGRESO, MIN(B.FECHAHORA) as INGRESO FROM CRONOS as A INNER JOIN CRONOS as B USING(TARJETA,FECHA) GROUP BY TARJETA) as C INNER JOIN PERSONAL USING (TARJETA);
Yo supongo que una simple:
SELECT TARJETA, NOMBRE, FECHA, MIN(A.HORA) as 'HORA ENTRADA', MAX(A.HORA) as 'HORA SALIDA' FORM CRONOS as A INNER JOIN PERSONAL USING(TARJETA,FECHA) GROUP BY TARJETA;
deberÃa funcionar. Al menos lo he visto funcionar.