MySQL - Consulta Complicada

 
Vista:

Consulta Complicada

Publicado por SAnd (1 intervención) el 04/12/2007 02:32:54
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:

Tarjeta Nombre Fecha Hora Entrada Hora Salida
3 Perez 2007/12/01 09:00:00 18:00:00

Espero que puedan ayudarme...
Gracias
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

RE:Consulta Complicada

Publicado por Juan Fancisco (1 intervención) el 27/12/2007 12:17:19
Hola como etas estuve viendo tu consulta y la solucion que te puedo dar es un tanto larga pero creo que puede andar bien.
Vos decis que ya tenes hecha dos consultas :una que te arroja la hora max y la otra la hora min , pues entonces lo que yo haria en tu lugar es crear 2 tablas temporales y guardar el resultado de la las consultas de la siguiente manera:
create table TempEntrada( tipo:bigint,
personal:varchar(30),
fecha: date,
Entrada:time(creo));
/*hasta aqui creas la tabla temporal*/
/*ahora la cargamos con los datos con tu consulta*/

INSERT INTO TempEntrada
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

luego creas otra con la misma estructura
ejm
create table TempSalida( tipo:bigint,
personal:varchar(30),
fecha: date,
Entrada:time(creo));
y luego haces lo mismo con la otra consulta que es la que seguramente te arroja la hora de salida (max)
Ahora ya tenes los datos que necesitas pero separados en dos tablas temporales entonces realizas otra consulta uniendolas por la trageta , y la fecha que deberian ser las mismas en las dos tablas temporales, lo que varia van a ser la hora de entrada y salida

ejm select SELECT tempEntrada.Tarjeta, TempEntrada.Apellido, TempEntrada.Fecha, TempEntrada.Entrada, TempSalida.salida
from TempEntrada, TempSalida where TempEntrada. tipo = TempSalida.tipo
and TempEntrada. fecha = TempSalida.fecha;

y luego cuando tenes el resultado eliminas las tablas temporales . Bueno espero que te sirva en teoria tendria que funcionar .
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

RE:Consulta Complicada

Publicado por Guada Fragoso (2 intervenciones) el 13/03/2012 09:43:32
Hola espero puedan ayudarme, es la primera vez que entro a un foro, lo que sucede es que tengo un par de tablas de la cual calculo las comisiones de los empleados de una empresa, filtrando por nombre.

Ahora cada comisión total de un empleado se divide en dos partes asi:

70% el vendedor y 30% el supervisor, entonces si tengo 5 empleados obtengo un reporte por cada empleado.

Ahora el problema es hacer una reporte para sumar las comisiones del supervisor, es decir, por cada empelado y la suma de sus comisiones, obtengo que el 30% es para el supervisor y debo ir sumando esta cantidad por cada número de vendedores para asi tener un total. Puede alguien ayudarme? no logro entender como hacerlo.

Tabla de datos actuales :
TABLA
id | Vendedor | monto | fecha |
1 Pablo 500
2 Laura 200
3 Pablo 300
4 Luis 200
5 Luis 3000
6 ANgel 2000
7 ANgel 600
8 Laura 700

Consulta actual:
set @var = Select sum(*) from Tabla where Vendedor = UNNOMBREELEGIDO;

set @ParteVendedor= @var * .70,
@ParteSupervisor = @var * .3;

Y lo muestro asi:

select @ParteVendedor as ComVenderor, @ParteSupervisor as ComSuper

LA DUDA: Repito ahora como hago para calcular un reporte de las comisiones del superviso?
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