Zona HTML Zona Java Zona PHP Zona ASP Zona Bases de datos
Inicio > Foros > MySQL > Consulta rara
-Foros de debate

MySQL
Lista de foros | Lista de mensajes de este foro

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

 
Re: Consulta rara
Enviado por Gonzalo el día 7 de diciembre de 2007

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.

 


Tienda
Patrocinados
 

Copyright © 1999-2006 Programación en castellano. Todos los derechos reservados.
Formulario de Contacto - Datos legales - Publicidad

Hospedaje web y servidores dedicados linux por Ferca Network