[ Foro de SQL (y MySQL) ]

como hacer una formula de dos consultas en mysql?

09-May-2019 21:05
Invitado (Devnoob)
0 Respuestas

Hola necesito ayuda con una formula que necesito para mostrar unos datos de manera mensual son dos consultas que en ambas son el resultado de una formula

la formula que quiero hacer es la siguiente:
DPM = MTBF/ (MTBF+ MTTR)

esta seria la primer consulta:
Hreales = Horas totales
Paro_mante= Paros por mantenimiento

formula: MTBF= Hrleas/Paro_mante

select monthname(Fproceso) as mes,
sum( Hreales) /
sum(case when Paro_mante = 0 then 1 else Paro_mante end) as mtbf
FROM proceso
group by year(Fproceso), month(Fproceso)

La segunda consulta:
formula: MTTR = Hora_parada / Paro_mante

SELECT  MONTHNAME(b.Fecha_ini)  AS Mes,
       SUM(b.Hora_parada)      AS Horas,
       IFNULL(p.Paro,0)        AS Hparos,
       SUM(b.Hora_parada) / CASE when p.Paro = 0 THEN 1 ELSE p.Paro END AS Resul
   FROM orden_trabajo as b
   INNER JOIn solicitud_mante a
       ON a.Id_soli = b.Id_soli
   -- Subconsulta de "Paros"
   LEFT JOIN (SELECT YEAR(Fproceso) AS anio,
                     MONTH(Fproceso)  AS mes,
                     SUM(case when Paro_mante = 0 then 1 else Paro_mante end) AS Paro
                     FROM proceso
                     GROUP BY YEAR(Fproceso), MONTH(Fproceso)
       ) p
       ON MONTH(b.Fecha_fin) = p.mes
       AND YEAR(b.Fecha_fin) = p.anio
   WHERE a.Tipo_mante = 'Correctivo Inmediato'
   GROUP by
       YEAR(b.Fecha_fin),
       MONTH(b.Fecha_fin),
       IFNULL(p.Paro,0)

Esto es lo que he hecho no se si ire bien pero igual tengo un error y no se cual es porque me confundi

Select a.MTBF/(a.MTBF + b.MTTR)
from
  (sum( Hreales) /
  sum(case when Paro_mante = 0 then 1 else Paro_mante end) as mtbf
  FROM proceso
  group by year(Fproceso), month(Fproceso)) a,
  (SELECT  SUM(case when b.Hora_parada = 0 then 1 else b.Hora_parada) / CASE when p.Paro = 0 THEN 1 ELSE p.Paro END AS MTTR
      FROM orden_trabajo as b
      INNER JOIn solicitud_mante a
       ON a.Id_soli = b.Id_soli
   -- Subconsulta de "Paros"
   LEFT JOIN (SELECT YEAR(Fproceso) AS anio,
                     MONTH(Fproceso)  AS mes,
                     SUM(case when Paro_mante = 0 then 1 else Paro_mante end) AS Paro
                     FROM proceso
                     GROUP BY YEAR(Fproceso), MONTH(Fproceso)
       ) p
       ON MONTH(b.Fecha_ini) = p.mes
       AND YEAR(b.Fecha_ini) = p.anio
   WHERE a.Tipo_mante = 'Correctivo Inmediato'
   GROUP by
       YEAR(b.Fecha_ini),
       MONTH(b.Fecha_ini),
       IFNULL(p.Paro,0) ) b




(No se puede continuar esta discusión porque tiene más de dos meses de antigüedad. Si tienes dudas parecidas, abre un nuevo hilo.)