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

Query calculo cesantias

Estas en el tema de Query calculo cesantias en el foro de Mysql en Foros del Web. Con este codigo intento calcular el valor por cesantias de un empleado ((select ct.sueldo from contrato as ct join datostrabajador as dt on ct.id=dt.contrato_id join ...
  #1 (permalink)  
Antiguo 12/05/2012, 21:15
 
Fecha de Ingreso: mayo-2012
Mensajes: 1
Antigüedad: 11 años, 11 meses
Puntos: 0
Query calculo cesantias

Con este codigo intento calcular el valor por cesantias de un empleado


((select ct.sueldo
from contrato as ct
join datostrabajador as dt on ct.id=dt.contrato_id
join trabajador as t on dt.trabajador_id=t.id )
*
(SELECT DATEDIFF(CURDATE(),(
SELECT ct.fecha_ingreso
FROM contrato AS ct
JOIN datostrabajador AS dt ON ct.id = dt.contrato_id
JOIN trabajador AS t ON dt.trabajador_id = t.id
))))/36


Cuando lo ejecuto me sale el siguiente error, y no se porque

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '* (SELECT DATEDIFF(CURDATE(),( SELECT ct.fecha_ingreso FROM contrato AS ct J' at line 5

Espero que alguien me pueda ayudar, gracias.
  #2 (permalink)  
Antiguo 13/05/2012, 07:13
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Query calculo cesantias

Estás haciendo una consulta innecesariamente complicada.
Miralo así: Si las condiciones y joins realizados en ambas subconsultas son iguales, devolverá en ambos casos el mismo registro o grupo de registros, y como los datos a usar en los cálculos pertenecen al mismo registro en cada caso, ¿para qué haces dos subconsultas en lugar de una, con toda la operación?
Sueldo:

Código MySQL:
Ver original
  1. select ct.sueldo
  2. from contrato as ct
  3. join datostrabajador as dt on ct.id=dt.contrato_id
  4. join trabajador as t on dt.trabajador_id=t.id
Dias transcurridos desde el ingreso:
Código MySQL:
Ver original
  1. SELECT DATEDIFF(CURDATE(), ct.fecha_ingreso)
  2. FROM contrato AS ct
  3. JOIN datostrabajador AS dt ON ct.id = dt.contrato_id
  4. JOIN trabajador AS t ON dt.trabajador_id = t.id
Todo eso se divide por 36.

Si miras con cuidado, las condiciones y joins son efectivamente entre ambas consultas son las mismas. Por tanto esto se podría expresar:

Código MySQL:
Ver original
  1. SELECT ((sueldo * DATEDIFF(CURDATE(), ct.fecha_ingreso))/36) CalculoCesantias
  2. FROM contrato ct
  3. JOIN datostrabajador dt ON ct.id = dt.contrato_id
  4. JOIN trabajador t ON dt.trabajador_id = t.id
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Etiquetas: sql
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 08:17.