Privacidad: Recuerde que la información escrita en los foros de programación es 100% pública y que su ip será registrada asociada a su mensaje. Si encuentra un mensaje fuera de lugar, por favor, notifiquelo para su revisión y eliminación.
Consulta rara
Enviado por ss007 el día 4 de diciembre de 2007
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
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.