Ver Mensaje Individual
  #4 (permalink)  
Antiguo 08/11/2013, 06:50
beimar26
 
Fecha de Ingreso: octubre-2013
Mensajes: 34
Antigüedad: 10 años, 6 meses
Puntos: 0
Respuesta: Ejecutar consulta si cumple condicion

Apreciados Ingenieros este Procedimiento me funciona Perfecto
me gustaría saber si alguien tiene una mejor forma de mejorar el performance
y algun ejemplo
Código MySQL:
Ver original
  1. DELIMITER $$
  2.  
  3. CREATE PROCEDURE MICONSULTA(IN  fecha1 DATE, fecha2 DATE,Grupo INT )
  4.  
  5. IF Grupo=2 THEN
  6.  
  7. eventos.nombre_razonsocial,
  8. eventos.id_ser,
  9. eventos.Nombres,
  10. IFNULL(eventos.fecha, "RESULTADO TOTAL SOCIO DE NEGOCIOS") AS 'FECHA',
  11. eventos.Entrada,
  12. eventos.Salida_Almuerzo,
  13. eventos.Entrada_Almuerzo,
  14. eventos.Total_Almuerzo,
  15. eventos.Salida_Laboral,
  16. eventos.Total_Labor
  17.  
  18.   FROM (
  19.  
  20. SELECT  e.id_ser,
  21. emp.nombre_razonsocial,
  22. CONCAT(p.Apellidos,'-',p.Nombres) AS 'Nombres',
  23. e.fecha,
  24. TIME(e.fecha_Entrada) AS 'Entrada',
  25. TIME(e.fecha_Salida_Almuerzo) AS 'Salida_Almuerzo',
  26. TIME (e.fecha_Entrada_Almuerzo) AS 'Entrada_Almuerzo',
  27. SEC_TO_TIME(SUM((TIME_TO_SEC(e.fecha_Entrada_Almuerzo) - TIME_TO_SEC(e.fecha_Salida_Almuerzo)))) AS 'Total_Almuerzo',
  28. TIME (e.fecha_salida) AS 'Salida_Laboral',
  29. SEC_TO_TIME(SUM((TIME_TO_SEC(e.fecha_Salida) - TIME_TO_SEC(e.fecha_Entrada)))) AS 'Total_Labor'
  30.  
  31. FROM (eventos e INNER JOIN personas p
  32. ON e.id_ser=p.id_ser
  33.  INNER JOIN  personas_empresa pe
  34.   ON e.id_ser=pe.id_ser
  35.    INNER JOIN  empresas emp
  36.    ON pe.id_empresa=emp.id_empresa)
  37.  
  38. WHERE fecha BETWEEN fecha1 AND fecha2
  39. #WHERE fecha BETWEEN '2013-10-01' AND '2013-10-15'
  40. AND  emp.id_empresa=2
  41. GROUP BY e.id_ser,e.fecha ASC WITH ROLLUP
  42. LIMIT 2000
  43. ) AS eventos;
  44.  
  45. ELSE IF Grupo=3 THEN
  46.  
  47. eventos.nombre_razonsocial,
  48. eventos.id_ser,
  49. eventos.Nombres,
  50. IFNULL(eventos.fecha, "RESULTADO TOTAL SOCIO DE NEGOCIOS") AS 'FECHA',
  51. eventos.Entrada,
  52. eventos.Salida_Almuerzo,
  53. eventos.Entrada_Almuerzo,
  54. eventos.Total_Almuerzo,
  55. eventos.Salida_Laboral,
  56. eventos.Total_Labor
  57.   FROM (
  58.  
  59. SELECT  e.id_ser,
  60. emp.nombre_razonsocial,
  61. CONCAT(p.Apellidos,'-',p.Nombres) AS 'Nombres',
  62. e.fecha,
  63. TIME(e.fecha_Entrada) AS 'Entrada',
  64. TIME(e.fecha_Salida_Almuerzo) AS 'Salida_Almuerzo',
  65. TIME (e.fecha_Entrada_Almuerzo) AS 'Entrada_Almuerzo',
  66. SEC_TO_TIME(SUM((TIME_TO_SEC(e.fecha_Entrada_Almuerzo) - TIME_TO_SEC(e.fecha_Salida_Almuerzo)))) AS 'Total_Almuerzo',
  67. TIME (e.fecha_salida) AS 'Salida_Laboral',
  68. SEC_TO_TIME(SUM((TIME_TO_SEC(e.fecha_Salida) - TIME_TO_SEC(e.fecha_Entrada)))) AS 'Total_Labor'
  69.  
  70. FROM (eventos e INNER JOIN personas p
  71. ON e.id_ser=p.id_ser
  72.  INNER JOIN  personas_empresa pe
  73.   ON e.id_ser=pe.id_ser
  74.    INNER JOIN  empresas emp
  75.    ON pe.id_empresa=emp.id_empresa)
  76.  
  77. WHERE fecha BETWEEN fecha1 AND fecha2
  78. #WHERE fecha BETWEEN '2013-10-01' AND '2013-10-15'
  79. AND  emp.id_empresa=3
  80. GROUP BY e.id_ser,e.fecha ASC WITH ROLLUP
  81. LIMIT 2000
  82. ) AS eventos;
  83.  
  84. ELSE  IF Grupo=4 THEN
  85.  
  86. eventos.nombre_razonsocial,
  87. eventos.id_ser,
  88. eventos.Nombres,
  89. IFNULL(eventos.fecha, "RESULTADO TOTAL SOCIO DE NEGOCIOS") AS 'FECHA',
  90. eventos.Entrada,
  91. eventos.Salida_Almuerzo,
  92. eventos.Entrada_Almuerzo,
  93. eventos.Total_Almuerzo,
  94. eventos.Salida_Laboral,
  95. eventos.Total_Labor
  96.   FROM (
  97.  
  98. SELECT  e.id_ser,
  99. emp.nombre_razonsocial,
  100. CONCAT(p.Apellidos,'-',p.Nombres) AS 'Nombres',
  101. e.fecha,
  102. TIME(e.fecha_Entrada) AS 'Entrada',
  103. TIME(e.fecha_Salida_Almuerzo) AS 'Salida_Almuerzo',
  104. TIME (e.fecha_Entrada_Almuerzo) AS 'Entrada_Almuerzo',
  105. SEC_TO_TIME(SUM((TIME_TO_SEC(e.fecha_Entrada_Almuerzo) - TIME_TO_SEC(e.fecha_Salida_Almuerzo)))) AS 'Total_Almuerzo',
  106. TIME (e.fecha_salida) AS 'Salida_Laboral',
  107. SEC_TO_TIME(SUM((TIME_TO_SEC(e.fecha_Salida) - TIME_TO_SEC(e.fecha_Entrada)))) AS 'Total_Labor'
  108.  
  109. FROM (eventos e INNER JOIN personas p
  110. ON e.id_ser=p.id_ser
  111.  INNER JOIN  personas_empresa pe
  112.   ON e.id_ser=pe.id_ser
  113.    INNER JOIN  empresas emp
  114.    ON pe.id_empresa=emp.id_empresa)
  115.  
  116. WHERE fecha BETWEEN fecha1 AND fecha2
  117. #WHERE fecha BETWEEN '2013-10-01' AND '2013-10-15'
  118. AND  emp.id_empresa=4
  119. GROUP BY e.id_ser,e.fecha ASC WITH ROLLUP
  120. LIMIT 2000
  121. ) AS eventos;
  122.  
  123. ELSE IF Grupo=5 THEN
  124.  
  125. eventos.nombre_razonsocial,
  126. eventos.id_ser,
  127. eventos.Nombres,
  128. IFNULL(eventos.fecha, "RESULTADO TOTAL SOCIO DE NEGOCIOS") AS 'FECHA',
  129. eventos.Entrada,
  130. eventos.Salida_Almuerzo,
  131. eventos.Entrada_Almuerzo,
  132. eventos.Total_Almuerzo,
  133. eventos.Salida_Laboral,
  134. eventos.Total_Labor
  135.   FROM (
  136.  
  137. SELECT  e.id_ser,
  138. emp.nombre_razonsocial,
  139. CONCAT(p.Apellidos,'-',p.Nombres) AS 'Nombres',
  140. e.fecha,
  141. TIME(e.fecha_Entrada) AS 'Entrada',
  142. TIME(e.fecha_Salida_Almuerzo) AS 'Salida_Almuerzo',
  143. TIME (e.fecha_Entrada_Almuerzo) AS 'Entrada_Almuerzo',
  144. SEC_TO_TIME(SUM((TIME_TO_SEC(e.fecha_Entrada_Almuerzo) - TIME_TO_SEC(e.fecha_Salida_Almuerzo)))) AS 'Total_Almuerzo',
  145. TIME (e.fecha_salida) AS 'Salida_Laboral',
  146. SEC_TO_TIME(SUM((TIME_TO_SEC(e.fecha_Salida) - TIME_TO_SEC(e.fecha_Entrada)))) AS 'Total_Labor'
  147.  
  148. FROM (eventos e INNER JOIN personas p
  149. ON e.id_ser=p.id_ser
  150.  INNER JOIN  personas_empresa pe
  151.   ON e.id_ser=pe.id_ser
  152.    INNER JOIN  empresas emp
  153.    ON pe.id_empresa=emp.id_empresa)
  154.  
  155. WHERE fecha BETWEEN fecha1 AND fecha2
  156. #WHERE fecha BETWEEN '2013-10-01' AND '2013-10-15'
  157. AND  emp.id_empresa=5
  158. GROUP BY e.id_ser,e.fecha ASC WITH ROLLUP
  159. LIMIT 2000
  160. ) AS eventos;
  161.  
  162. ELSE  IF Grupo=6 THEN
  163.  
  164. eventos.nombre_razonsocial,
  165. eventos.id_ser,
  166. eventos.Nombres,
  167. IFNULL(eventos.fecha, "RESULTADO TOTAL SOCIO DE NEGOCIOS") AS 'FECHA',
  168. eventos.Entrada,
  169. eventos.Salida_Almuerzo,
  170. eventos.Entrada_Almuerzo,
  171. eventos.Total_Almuerzo,
  172. eventos.Salida_Laboral,
  173. eventos.Total_Labor
  174.   FROM (
  175.  
  176. SELECT  e.id_ser,
  177. emp.nombre_razonsocial,
  178. CONCAT(p.Apellidos,'-',p.Nombres) AS 'Nombres',
  179. e.fecha,
  180. TIME(e.fecha_Entrada) AS 'Entrada',
  181. TIME(e.fecha_Salida_Almuerzo) AS 'Salida_Almuerzo',
  182. TIME (e.fecha_Entrada_Almuerzo) AS 'Entrada_Almuerzo',
  183. SEC_TO_TIME(SUM((TIME_TO_SEC(e.fecha_Entrada_Almuerzo) - TIME_TO_SEC(e.fecha_Salida_Almuerzo)))) AS 'Total_Almuerzo',
  184. TIME (e.fecha_salida) AS 'Salida_Laboral',
  185. SEC_TO_TIME(SUM((TIME_TO_SEC(e.fecha_Salida) - TIME_TO_SEC(e.fecha_Entrada)))) AS 'Total_Labor'
  186.  
  187. FROM (eventos e INNER JOIN personas p
  188. ON e.id_ser=p.id_ser
  189.  INNER JOIN  personas_empresa pe
  190.   ON e.id_ser=pe.id_ser
  191.    INNER JOIN  empresas emp
  192.    ON pe.id_empresa=emp.id_empresa)
  193.  
  194. WHERE fecha BETWEEN fecha1 AND fecha2
  195. #WHERE fecha BETWEEN '2013-10-01' AND '2013-10-15'
  196. AND  emp.id_empresa=6
  197. GROUP BY e.id_ser,e.fecha ASC WITH ROLLUP
  198. LIMIT 2000
  199. ) AS eventos;
  200.  
  201. ELSE IF Grupo=7 THEN
  202.  
  203. eventos.nombre_razonsocial,
  204. eventos.id_ser,
  205. eventos.Nombres,
  206. IFNULL(eventos.fecha, "RESULTADO TOTAL SOCIO DE NEGOCIOS") AS 'FECHA',
  207. eventos.Entrada,
  208. eventos.Salida_Almuerzo,
  209. eventos.Entrada_Almuerzo,
  210. eventos.Total_Almuerzo,
  211. eventos.Salida_Laboral,
  212. eventos.Total_Labor
  213.   FROM (
  214.  
  215. SELECT  e.id_ser,
  216. emp.nombre_razonsocial,
  217. CONCAT(p.Apellidos,'-',p.Nombres) AS 'Nombres',
  218. e.fecha,
  219. TIME(e.fecha_Entrada) AS 'Entrada',
  220. TIME(e.fecha_Salida_Almuerzo) AS 'Salida_Almuerzo',
  221. TIME (e.fecha_Entrada_Almuerzo) AS 'Entrada_Almuerzo',
  222. SEC_TO_TIME(SUM((TIME_TO_SEC(e.fecha_Entrada_Almuerzo) - TIME_TO_SEC(e.fecha_Salida_Almuerzo)))) AS 'Total_Almuerzo',
  223. TIME (e.fecha_salida) AS 'Salida_Laboral',
  224. SEC_TO_TIME(SUM((TIME_TO_SEC(e.fecha_Salida) - TIME_TO_SEC(e.fecha_Entrada)))) AS 'Total_Labor'
  225.  
  226. FROM (eventos e INNER JOIN personas p
  227. ON e.id_ser=p.id_ser
  228.  INNER JOIN  personas_empresa pe
  229.   ON e.id_ser=pe.id_ser
  230.    INNER JOIN  empresas emp
  231.    ON pe.id_empresa=emp.id_empresa)
  232.  
  233. WHERE fecha BETWEEN fecha1 AND fecha2
  234. #WHERE fecha BETWEEN '2013-10-01' AND '2013-10-15'
  235. AND  emp.id_empresa=7
  236. GROUP BY e.id_ser,e.fecha ASC WITH ROLLUP
  237. LIMIT 2000
  238. ) AS eventos;
  239.  
  240. ELSE IF Grupo=8 THEN
  241.  
  242. eventos.nombre_razonsocial,
  243. eventos.id_ser,
  244. eventos.Nombres,
  245. IFNULL(eventos.fecha, "RESULTADO TOTAL SOCIO DE NEGOCIOS") AS 'FECHA',
  246. eventos.Entrada,
  247. eventos.Salida_Almuerzo,
  248. eventos.Entrada_Almuerzo,
  249. eventos.Total_Almuerzo,
  250. eventos.Salida_Laboral,
  251. eventos.Total_Labor
  252.   FROM (
  253.  
  254. SELECT  e.id_ser,
  255. emp.nombre_razonsocial,
  256. CONCAT(p.Apellidos,'-',p.Nombres) AS 'Nombres',
  257. e.fecha,
  258. TIME(e.fecha_Entrada) AS 'Entrada',
  259. TIME(e.fecha_Salida_Almuerzo) AS 'Salida_Almuerzo',
  260. TIME (e.fecha_Entrada_Almuerzo) AS 'Entrada_Almuerzo',
  261. SEC_TO_TIME(SUM((TIME_TO_SEC(e.fecha_Entrada_Almuerzo) - TIME_TO_SEC(e.fecha_Salida_Almuerzo)))) AS 'Total_Almuerzo',
  262. TIME (e.fecha_salida) AS 'Salida_Laboral',
  263. SEC_TO_TIME(SUM((TIME_TO_SEC(e.fecha_Salida) - TIME_TO_SEC(e.fecha_Entrada)))) AS 'Total_Labor'
  264.  
  265. FROM (eventos e INNER JOIN personas p
  266. ON e.id_ser=p.id_ser
  267.  INNER JOIN  personas_empresa pe
  268.   ON e.id_ser=pe.id_ser
  269.    INNER JOIN  empresas emp
  270.    ON pe.id_empresa=emp.id_empresa)
  271.  
  272. WHERE fecha BETWEEN fecha1 AND fecha2
  273. #WHERE fecha BETWEEN '2013-10-01' AND '2013-10-15'
  274. AND  emp.id_empresa=8
  275. GROUP BY e.id_ser,e.fecha ASC WITH ROLLUP
  276. LIMIT 2000
  277. ) AS eventos;
  278.  
  279.  
  280.  
  281. eventos.nombre_razonsocial,
  282. eventos.id_ser,
  283. eventos.Nombres,
  284. IFNULL(eventos.fecha, "RESULTADO TOTAL SOCIO DE NEGOCIOS") AS 'FECHA',
  285. eventos.Entrada,
  286. eventos.Salida_Almuerzo,
  287. eventos.Entrada_Almuerzo,
  288. eventos.Total_Almuerzo,
  289. eventos.Salida_Laboral,
  290. eventos.Total_Labor
  291.   FROM (
  292.  
  293. SELECT  e.id_ser,
  294. emp.nombre_razonsocial,
  295. CONCAT(p.Apellidos,'-',p.Nombres) AS 'Nombres',
  296. e.fecha,
  297. TIME(e.fecha_Entrada) AS 'Entrada',
  298. TIME(e.fecha_Salida_Almuerzo) AS 'Salida_Almuerzo',
  299. TIME (e.fecha_Entrada_Almuerzo) AS 'Entrada_Almuerzo',
  300. SEC_TO_TIME(SUM((TIME_TO_SEC(e.fecha_Entrada_Almuerzo) - TIME_TO_SEC(e.fecha_Salida_Almuerzo)))) AS 'Total_Almuerzo',
  301. TIME (e.fecha_salida) AS 'Salida_Laboral',
  302. SEC_TO_TIME(SUM((TIME_TO_SEC(e.fecha_Salida) - TIME_TO_SEC(e.fecha_Entrada)))) AS 'Total_Labor'
  303.  
  304. FROM (eventos e INNER JOIN personas p
  305. ON e.id_ser=p.id_ser
  306.  INNER JOIN  personas_empresa pe
  307.   ON e.id_ser=pe.id_ser
  308.    INNER JOIN  empresas emp
  309.    ON pe.id_empresa=emp.id_empresa)
  310.  
  311. WHERE fecha BETWEEN fecha1 AND fecha2
  312. #WHERE fecha BETWEEN '2013-10-01' AND '2013-10-15'
  313. GROUP BY e.id_ser,e.fecha ASC WITH ROLLUP
  314. LIMIT 2000
  315. ) AS eventos;
  316.  
  317.     END IF;
  318.         END IF;
  319.             END IF;
  320.                 END IF;
  321.                     END IF;
  322.                         END IF;
  323.  
  324.     END$$
  325.  
  326. DELIMITER ;

de Antemano muchas gracias por su colaboración
Cordial saludo

Última edición por gnzsoloyo; 08/11/2013 a las 07:20