Помощь с оптимизацией

Прошу помочь с mysql процедурой. Он долго грузится и вылетает таймаут соедининения.

CREATE DEFINER=`root`@`localhost` PROCEDURE `GetNFReport`()
BEGIN
  SELECT
    l.id,
    f.name AS filial,
    r.Name AS typeName,
    s1.name AS segment,
    l.startDateTime,
    IF(l.statusId IN (13, 27), tempfinish.finishedDateTime, NULL) AS finishedDateTime,
    alltotal.totalMinute AS totalMinute,
    -- ROUND(CalcWorkTime(l.startDateTime, tempfinish.finishedDateTime)) AS totalMinute,
    temp28total.totalMinute + temp26total.totalMinute AS totalConfirmMinute,
    alltotal.totalMinute - IF(temp4total.KMTotalMinute IS NOT NULL, temp4total.KMTotalMinute, 0) - ROUND(CalcWorkTime(l.startDateTime, temp1.docWaitDateTime)) - IF(temp28total.totalMinute IS NOT NULL, temp28total.totalMinute, 0) - IF(temp26total.totalMinute IS NOT NULL, temp26total.totalMinute, 0) AS totalDKAMinute,
    -- ROUND(CalcWorkTime(l.startDateTime, temp26.signDateTime)) AS totalConfirmMinute,
    l.companyName,
    l.bin,
    s.name AS status,
    ka1.name AS ka1,
    ka2.name AS ka2,
    checker.name AS checker,
    monitoring.name AS monitoring,
    l.sokl_num + l.sokl_num1 + l.sokl_new_num + l.sokl_new_damu_num AS sokl_nums,
    l.sokl_num AS sokl_num,
    l.sokl_num1 AS sokl_num1,
    l.sokl_new_num,
    l.sokl_new_damu_num,
    l.dpsokl,
    l.dz_num + l.dz_num1 + l.dz_num2 + l.dz_num3 AS dz_nums,
    l.dzdp_num + l.dzdp_num1 + l.dzdp_num2 + l.dzdp_num3 AS dzdp_nums,
    l.dg_num,
    l.dgdp_num,
    Normatives.normativMaker AS normativMaker,
    Normatives.normativChecker AS normativChecker,
    l.comments,
    temp29.waitDateTime,
    -- ROUND(CalcWorkTime(temp29.waitDateTime, temp5.toWorkDateTime)) + temp12total.waitReWorkMinute AS waitMinute,
    temp29total.waitAllDateTime + IF(temp12total.waitReWorkMinute IS NOT NULL, temp12total.waitReWorkMinute, 0) AS waitMinute,
    temp5.toWorkDateTime,
    -- ROUND(CalcWorkTime(temp5.toWorkDateTime, temp7.workDateTime)) AS toWorkMinute,
    temp5total.toWorkTotalMinute AS toWorkMinute,
    temp7min.workDateTime,
    -- temp7.workDateTime,
    -- ROUND(CalcWorkTime(temp7.workDateTime, temp9.waitCheckerDateTime)) AS lastworkMinute,
    temp7total.makerWaitTotalMinute AS totalworkMinute,
    -- ROUND(CalcWorkTime(temp7min.workDateTime, temp9.waitCheckerDateTime)) AS totalworkMinute,

    temp10.acceptedDateTime,
    temp12.reWorkDateTime,
    IF(tempReworkKMCnt.reworkCnt IS NOT NULL, tempReworkKMCnt.reworkCnt, '0') AS reworkKMCnt,
    IF(tempReworkCnt.reworkCnt IS NOT NULL, tempReworkCnt.reworkCnt, '0') AS reworkCnt,

    -- ROUND(CalcWorkTime(temp10.acceptedDateTime, temp28.signedDateTime)) AS signedMinute,
    temp26total.TotalMinute AS signedMinute,
    temp28.signedDateTime,
    tempCommentWorker.commentWorker,
    tempCommentChecker.commentChecker,
    tempCommentDocs.commentDocs,
    temp1.docWaitDateTime,

    ROUND(CalcWorkTime(l.startDateTime, temp1.docWaitDateTime)) AS waitDocMinute,

    temp2.doccheckDateTime,
    temp2total.TotalMinute AS docCheckMinute,
    -- ROUND(CalcWorkTime(temp2.doccheckDateTime, temp3.scankDateTime)) AS docCheckMinute,
    temp3.scankDateTime,

    temp3total.TotalMinute AS docScanMinute,
    -- ROUND(CalcWorkTime(temp3.scankDateTime, temp29.waitDateTime)) AS docScanMinute,

    temp9.waitCheckerDateTime,
    -- ROUND(CalcWorkTime(temp9.waitCheckerDateTime, temp11.acceptCheckerDateTime)) AS waitCheckerMinute,
    temp9total.checkerWaitTotalMinute + IF(temp42total.totalMinute IS NOT NULL, temp42total.totalMinute, 0) AS waitCheckerMinute,
    temp11.acceptCheckerDateTime,
    ROUND(CalcWorkTime(temp11.acceptCheckerDateTime, temp10.acceptedDateTime)) AS workCheckerMinute,

    ROUND(CalcWorkTime(temp9.waitCheckerDateTime, temp10.acceptedDateTime)) AS lastCheckerMinute,
    temp11total.checkerTotalMinute AS totalCheckerMinute,
    temp11reWorktotal.checkerTotalMinute AS reworkCheckerTotalMinute,

    -- IF(ROUND(CalcWorkTime(temp7min.workDateTime, temp7min.finishedDateTime)) - Normatives.normativMaker < 0, 0, ROUND(CalcWorkTime(temp7min.workDateTime, temp7min.finishedDateTime)) - Normatives.normativMaker) AS diviationWorkMinute,
    -- IF(temp7reWorktotal.makerWaitTotalMinute - (reWorkCnt.sokl_rework_nums * 15 + reWorkCnt.dp_rework_sokl * 15 + reWorkCnt.dz_rework_nums* 15 + reWorkCnt.dzdp_rework_nums * 15 + reWorkCnt.dg_rework_num * 10 + reWorkCnt.dgdp_rework_num* 10) < 0, 0, temp7reWorktotal.makerWaitTotalMinute - (reWorkCnt.sokl_rework_nums * 15 + reWorkCnt.dp_rework_sokl * 15 + reWorkCnt.dz_rework_nums* 15 + reWorkCnt.dzdp_rework_nums * 15 + reWorkCnt.dg_rework_num * 10 + reWorkCnt.dgdp_rework_num* 10)) AS diviationReworkMinute,
    -- IF(temp7total.makerWaitTotalMinute - Normatives.normativMaker - (reWorkCnt.sokl_rework_nums * 15 + reWorkCnt.dp_rework_sokl * 15 + reWorkCnt.dz_rework_nums* 15 + reWorkCnt.dzdp_rework_nums * 15 + reWorkCnt.dg_rework_num * 10 + reWorkCnt.dgdp_rework_num* 10) < 0, 0, temp7total.makerWaitTotalMinute - Normatives.normativMaker - (reWorkCnt.sokl_rework_nums * 15 + reWorkCnt.dp_rework_sokl * 15 + reWorkCnt.dz_rework_nums* 15 + reWorkCnt.dzdp_rework_nums * 15 + reWorkCnt.dg_rework_num * 10 + reWorkCnt.dgdp_rework_num* 10)) AS diviationTotalMinute,
    ROUND(CalcWorkTime(temp7min.workDateTime, temp7min.finishedDateTime)) - Normatives.normativMaker AS diviationWorkMinute,
    temp7reWorktotal.makerWaitTotalMinute - (reWorkCnt.sokl_rework_nums * 15 + reWorkCnt.dp_rework_sokl * 15 + reWorkCnt.dz_rework_nums * 15 + reWorkCnt.dzdp_rework_nums * 15 + reWorkCnt.dg_rework_num * 10 + reWorkCnt.dgdp_rework_num * 10) AS diviationReworkMinute,
    temp7total.makerWaitTotalMinute - Normatives.normativMaker - (reWorkCnt.sokl_rework_nums * 15 + reWorkCnt.dp_rework_sokl * 15 + reWorkCnt.dz_rework_nums * 15 + reWorkCnt.dzdp_rework_nums * 15 + reWorkCnt.dg_rework_num * 10 + reWorkCnt.dgdp_rework_num * 10) AS diviationTotalMinute,

    -- IF(ROUND(CalcWorkTime(temp11min.createDateTime, temp11min.finishedDateTime)) - Normatives.normativChecker < 0, 0, ROUND(CalcWorkTime(temp11min.createDateTime, temp11min.finishedDateTime)) - Normatives.normativChecker)  AS diviationCheckerWorkMinute,
    -- IF(temp11reWorktotal.checkerTotalMinute - (reWorkCnt.sokl_rework_nums * 15 + reWorkCnt.dp_rework_sokl * 15 + reWorkCnt.dz_rework_nums* 15 + reWorkCnt.dzdp_rework_nums * 15 + reWorkCnt.dg_rework_num * 10 + reWorkCnt.dgdp_rework_num* 10)<0,0,temp11reWorktotal.checkerTotalMinute - (reWorkCnt.sokl_rework_nums * 15 + reWorkCnt.dp_rework_sokl * 15 + reWorkCnt.dz_rework_nums* 15 + reWorkCnt.dzdp_rework_nums * 15 + reWorkCnt.dg_rework_num * 10 + reWorkCnt.dgdp_rework_num* 10)) AS diviationCheckerReworkMinute,
    -- IF(temp11total.checkerTotalMinute - Normatives.normativChecker - (reWorkCnt.sokl_rework_nums * 15 + reWorkCnt.dp_rework_sokl * 15 + reWorkCnt.dz_rework_nums* 15 + reWorkCnt.dzdp_rework_nums * 15 + reWorkCnt.dg_rework_num * 10 + reWorkCnt.dgdp_rework_num* 10) < 0,0,temp11total.checkerTotalMinute - Normatives.normativChecker - (reWorkCnt.sokl_rework_nums * 15 + reWorkCnt.dp_rework_sokl * 15 + reWorkCnt.dz_rework_nums* 15 + reWorkCnt.dzdp_rework_nums * 15 + reWorkCnt.dg_rework_num * 10 + reWorkCnt.dgdp_rework_num* 10)) AS diviationCheckerTotalMinute,
    -- 0 AS diviationTotalMinute,

    ROUND(CalcWorkTime(temp11min.createDateTime, temp11min.finishedDateTime)) - Normatives.normativChecker AS diviationCheckerWorkMinute,
    temp11reWorktotal.checkerTotalMinute - (reWorkCnt.sokl_rework_nums * 15 + reWorkCnt.dp_rework_sokl * 15 + reWorkCnt.dz_rework_nums * 15 + reWorkCnt.dzdp_rework_nums * 15 + reWorkCnt.dg_rework_num * 10 + reWorkCnt.dgdp_rework_num * 10) AS diviationCheckerReworkMinute,
    temp11total.checkerTotalMinute - Normatives.normativChecker - (reWorkCnt.sokl_rework_nums * 15 + reWorkCnt.dp_rework_sokl * 15 + reWorkCnt.dz_rework_nums * 15 + reWorkCnt.dzdp_rework_nums * 15 + reWorkCnt.dg_rework_num * 10 + reWorkCnt.dgdp_rework_num * 10) AS diviationCheckerTotalMinute,

    temp4total.KMTotalMinute AS reworkKMTotalMinute,
    temp8total.Ka1ReworkTotalMinute AS reworkKa1TotalMinute,
    temp7reWorktotal.makerWaitTotalMinute AS reworkMakerTotalMinute,

    0 AS waitKa1ReworkMinute,
    temp12total.waitReWorkMinute AS waitMakerReworkMinute,
    temp42total.totalMinute AS waitChekerReworkMinute,
    temp8total.cnt AS ka1ReworkCnt,

    reWorkCnt.sokl_rework_nums,
    reWorkCnt.dp_rework_sokl,
    reWorkCnt.dz_rework_nums,
    reWorkCnt.dzdp_rework_nums,
    reWorkCnt.dg_rework_num,
    reWorkCnt.dgdp_rework_num,

    reWorkCnt.sokl_rework_nums * 15 + reWorkCnt.dp_rework_sokl * 15 + reWorkCnt.dz_rework_nums * 15 + reWorkCnt.dzdp_rework_nums * 15 + reWorkCnt.dg_rework_num * 10 + reWorkCnt.dgdp_rework_num * 10 AS normativReworkMaker,
    (reWorkCnt.sokl_rework_nums * 15 + reWorkCnt.dp_rework_sokl * 15 + reWorkCnt.dz_rework_nums * 15 + reWorkCnt.dzdp_rework_nums * 15 + reWorkCnt.dg_rework_num * 10 + reWorkCnt.dgdp_rework_num * 10) AS normativReworkChecker,
    30 AS normativDecision,
    IF(temp5total.toWorkTotalMinute - 30 < 0, 0, temp5total.toWorkTotalMinute - 30) AS diviationDecisionMinute,
    temp40.waitDateTime AS waitCheckListDateTime,
    temp40.TotalMinute AS waitCheckListMinute,
    temp10total.TotalMinute AS downloadKodMinute,
    temp10total.downloanDateTime AS downloadKodDateTime
  -- 0 AS normativReworkMaker

  FROM loanrequest l
    INNER JOIN segments s1
      ON s1.id = l.segmentId
    INNER JOIN filials f
      ON l.filialId = f.id
    INNER JOIN statuses s
      ON l.statusId = s.id

    INNER JOIN requesttype r
      ON r.Id = l.typeId

    LEFT JOIN (SELECT
        lu11.finishedDateTime,
        lu11.loanId
      FROM loanusers lu11
      WHERE lu11.id = (SELECT
          lu2.id
        FROM loanusers lu2
        WHERE lu2.loanId = lu11.loanId
        AND lu2.isFinished = 1
        ORDER BY lu2.id DESC LIMIT 1)) AS tempfinish
      ON tempfinish.loanId = l.id

    LEFT JOIN users ka1
      ON ka1.id = l.ka1Id
    LEFT JOIN users ka2
      ON ka2.id = l.ka2Id
    LEFT JOIN users checker
      ON checker.id = l.checkerId
    LEFT JOIN users monitoring
      ON monitoring.id = l.monitoringId

    LEFT JOIN (SELECT
        lu1.loanId,
        MIN(lu1.createDateTime) AS waitDateTime
      FROM loanusers lu1
      WHERE lu1.statusId = 29
      GROUP BY lu1.loanId) AS temp29
      ON temp29.loanId = l.id

    LEFT JOIN (SELECT
        lu1.loanId,
        -- MAX(lu1.createDateTime) AS waitDateTime
        SUM(ROUND(CalcWorkTime(lu1.createDateTime, lu1.finishedDateTime))) waitAllDateTime
      FROM loanusers lu1
      WHERE lu1.statusId = 29
      GROUP BY lu1.loanId) AS temp29total
      ON temp29total.loanId = l.id

    LEFT JOIN (SELECT
        lu1.loanId,
        SUM(ROUND(CalcWorkTime(lu1.createDateTime, lu1.finishedDateTime))) waitReWorkMinute
      FROM loanusers lu1
      WHERE lu1.statusId = 12
      GROUP BY lu1.loanId) AS temp12total
      ON temp12total.loanId = l.id

    LEFT JOIN (SELECT
        lu1.loanId,
        SUM(ROUND(CalcWorkTime(lu1.createDateTime, lu1.finishedDateTime))) toWorkTotalMinute
      FROM loanusers lu1
      WHERE lu1.statusId = 5
      GROUP BY lu1.loanId) AS temp5total
      ON temp5total.loanId = l.id

    LEFT JOIN (SELECT
        lu1.loanId,
        MIN(lu1.createDateTime) AS toWorkDateTime
      FROM loanusers lu1
      WHERE lu1.statusId = 5
      GROUP BY lu1.loanId) AS temp5
      ON temp5.loanId = l.id

    LEFT JOIN (SELECT
        lu1.loanId,
        MIN(lu1.createDateTime) AS workDateTime
      FROM loanusers lu1
      WHERE lu1.statusId = 7
      GROUP BY lu1.loanId) AS temp7
      ON temp7.loanId = l.id

    LEFT JOIN (SELECT
        lu1.loanId,
        MIN(lu1.createDateTime) AS workDateTime,
        MIN(lu1.finishedDateTime) AS finishedDateTime
      FROM loanusers lu1
      WHERE lu1.statusId = 7
      GROUP BY lu1.loanId) AS temp7min
      ON temp7min.loanId = l.id

    LEFT JOIN (SELECT
        lu1.loanId,
        SUM(ROUND(CalcWorkTime(lu1.createDateTime, lu1.finishedDateTime))) makerWaitTotalMinute
      -- SUM(ROUND(CalcWorkTimeWithDayFinish(lu1.createDateTime, lu1.finishedDateTime, lu1.id ))) AS makerWaitTotalMinute
      FROM loanusers lu1
      WHERE lu1.statusId = 7
      GROUP BY lu1.loanId) AS temp7total
      ON temp7total.loanId = l.id

    LEFT JOIN (SELECT
        lu1.loanId,
        SUM(ROUND(CalcWorkTime(lu1.createDateTime, lu1.finishedDateTime))) makerWaitTotalMinute
      -- SUM(ROUND(CalcWorkTimeWithDayFinish(lu1.createDateTime, lu1.finishedDateTime, lu1.id ))) AS makerWaitTotalMinute
      FROM loanusers lu1
      WHERE lu1.statusId = 7
      AND lu1.id NOT IN (SELECT
          MIN(l1.id)
        FROM loanusers l1
        WHERE l1.statusId = 7
        AND l1.loanId = lu1.loanId
        GROUP BY l1.loanId)
      GROUP BY lu1.loanId) AS temp7reWorktotal
      ON temp7reWorktotal.loanId = l.id

    LEFT JOIN (SELECT
        lu1.loanId,
        MIN(lu1.createDateTime) AS createDateTime,
        MIN(lu1.finishedDateTime) AS finishedDateTime
      FROM loanusers lu1
      WHERE lu1.statusId = 11
      GROUP BY lu1.loanId) AS temp11min
      ON temp11min.loanId = l.id

    LEFT JOIN (SELECT
        lu1.loanId,
        SUM(ROUND(CalcWorkTime(lu1.createDateTime, lu1.finishedDateTime))) checkerTotalMinute
      -- SUM(ROUND(CalcWorkTimeWithDayFinish(lu1.createDateTime, lu1.finishedDateTime, lu1.id ))) AS makerWaitTotalMinute
      FROM loanusers lu1
      WHERE lu1.statusId = 11
      AND lu1.id NOT IN (SELECT
          MIN(l1.id)
        FROM loanusers l1
        WHERE l1.statusId = 11
        AND l1.loanId = lu1.loanId
        GROUP BY l1.loanId)
      GROUP BY lu1.loanId) AS temp11reWorktotal
      ON temp11reWorktotal.loanId = l.id

    LEFT JOIN (SELECT
        lu1.loanId,
        SUM(ROUND(CalcWorkTime(lu1.createDateTime, lu1.finishedDateTime))) checkerTotalMinute
      -- SUM(ROUND(CalcWorkTimeWithDayFinish(lu1.createDateTime, lu1.finishedDateTime, lu1.id ))) AS makerWaitTotalMinute
      FROM loanusers lu1
      WHERE lu1.statusId = 20
      GROUP BY lu1.loanId) AS temp20total
      ON temp20total.loanId = l.id

    LEFT JOIN (SELECT
        lu1.loanId,
        MAX(lu1.createDateTime) AS acceptedDateTime
      FROM loanusers lu1
      WHERE lu1.statusId = 10
      GROUP BY lu1.loanId) AS temp10
      ON temp10.loanId = l.id

    LEFT JOIN (SELECT
        lu1.loanId,
        MAX(lu1.createDateTime) AS reWorkDateTime
      FROM loanusers lu1
      WHERE lu1.statusId = 12
      GROUP BY lu1.loanId) AS temp12
      ON temp12.loanId = l.id

    LEFT JOIN (SELECT
        lu1.loanId,
        COUNT(lu1.loanId) AS reworkCnt
      FROM loanusers lu1
      WHERE lu1.statusId = 4
      GROUP BY lu1.loanId) AS tempReworkKMCnt
      ON tempReworkKMCnt.loanId = l.id

    LEFT JOIN (SELECT
        lu1.loanId,
        COUNT(lu1.loanId) AS reworkCnt
      FROM loanusers lu1
      WHERE lu1.statusId = 12
      GROUP BY lu1.loanId) AS tempReworkCnt
      ON tempReworkCnt.loanId = l.id

    LEFT JOIN (SELECT
        lu1.loanId,
        MAX(lu1.createDateTime) AS signedDateTime
      FROM loanusers lu1
      WHERE lu1.statusId = 28
      GROUP BY lu1.loanId) AS temp28
      ON temp28.loanId = l.id


    LEFT JOIN (SELECT
        lu1.loanId,
        MAX(lu1.finishedDateTime) AS downloanDateTime,
        SUM(ROUND(CalcWorkTime(lu1.createDateTime, lu1.finishedDateTime))) totalMinute
      FROM loanusers lu1
      WHERE lu1.statusId = 28
      GROUP BY lu1.loanId) AS temp28total
      ON temp28total.loanId = l.id

    LEFT JOIN (SELECT
        lu1.loanId,
        MAX(lu1.finishedDateTime) AS downloanDateTime,
        SUM(ROUND(CalcWorkTime(lu1.createDateTime, lu1.finishedDateTime))) totalMinute
      FROM loanusers lu1
      WHERE lu1.statusId = 10
      GROUP BY lu1.loanId) AS temp10total
      ON temp10total.loanId = l.id

    LEFT JOIN (SELECT
        t.loanId,
        GROUP_CONCAT(t.comment) AS commentWorker
      FROM (SELECT
          lu1.comment,
          lu1.loanId
        FROM loanusers lu1
          INNER JOIN users u1
            ON u1.id = lu1.userId
        WHERE u1.positionId = 9) AS t
      GROUP BY t.loanId) AS tempCommentWorker
      ON tempCommentWorker.loanId = l.id


    LEFT JOIN (SELECT
        t.loanId,
        GROUP_CONCAT(t.comment) AS commentChecker
      FROM (SELECT
          lu1.comment,
          lu1.loanId
        FROM loanusers lu1
          INNER JOIN users u1
            ON u1.id = lu1.userId
        WHERE u1.positionId = 10) AS t
      GROUP BY t.loanId) AS tempCommentChecker
      ON tempCommentChecker.loanId = l.id

    LEFT JOIN (SELECT
        t.loanId,
        GROUP_CONCAT(t.comment) AS commentDocs
      FROM (SELECT
          lu1.comment,
          lu1.loanId
        FROM loanusers lu1
          INNER JOIN users u1
            ON u1.id = lu1.userId
        WHERE u1.positionId = 3) AS t
      GROUP BY t.loanId) AS tempCommentDocs
      ON tempCommentDocs.loanId = l.id

    LEFT JOIN (SELECT
        lu1.loanId,
        MAX(lu1.finishedDateTime) AS docWaitDateTime
      FROM loanusers lu1
      WHERE lu1.statusId = 1
      GROUP BY lu1.loanId) AS temp1
      ON temp1.loanId = l.id

    LEFT JOIN (SELECT
        lu1.loanId,
        MIN(lu1.createDateTime) AS doccheckDateTime
      FROM loanusers lu1
      WHERE lu1.statusId = 2
      GROUP BY lu1.loanId) AS temp2
      ON temp2.loanId = l.id

    LEFT JOIN (SELECT
        lu1.loanId,
        SUM(ROUND(CalcWorkTime(lu1.createDateTime, lu1.finishedDateTime))) TotalMinute
      FROM loanusers lu1
      WHERE lu1.statusId = 2
      GROUP BY lu1.loanId) AS temp2total
      ON temp2total.loanId = l.id

    LEFT JOIN (SELECT
        lu1.loanId,
        MIN(lu1.createDateTime) AS scankDateTime
      FROM loanusers lu1
      WHERE lu1.statusId = 3
      GROUP BY lu1.loanId) AS temp3
      ON temp3.loanId = l.id

    LEFT JOIN (SELECT
        lu1.loanId,
        SUM(ROUND(CalcWorkTime(lu1.createDateTime, lu1.finishedDateTime))) TotalMinute
      FROM loanusers lu1
      WHERE lu1.statusId = 3
      GROUP BY lu1.loanId) AS temp3total
      ON temp3total.loanId = l.id

    LEFT JOIN (SELECT
        lu1.loanId,
        SUM(ROUND(CalcWorkTime(lu1.createDateTime, lu1.finishedDateTime))) checkerWaitTotalMinute
      FROM loanusers lu1
      WHERE lu1.statusId = 9
      GROUP BY lu1.loanId) AS temp9total
      ON temp9total.loanId = l.id

    LEFT JOIN (SELECT
        lu1.loanId,
        MIN(lu1.createDateTime) AS waitCheckerDateTime
      FROM loanusers lu1
      WHERE lu1.statusId = 9
      GROUP BY lu1.loanId) AS temp9
      ON temp9.loanId = l.id

    LEFT JOIN (SELECT
        lu1.loanId,
        MIN(lu1.createDateTime) AS waitDateTime,
        SUM(ROUND(CalcWorkTime(lu1.createDateTime, lu1.finishedDateTime))) TotalMinute
      FROM loanusers lu1
      WHERE lu1.statusId = 40
      GROUP BY lu1.loanId) AS temp40
      ON temp40.loanId = l.id

    LEFT JOIN (SELECT
        lu1.loanId,
        MIN(lu1.createDateTime) AS acceptCheckerDateTime
      FROM loanusers lu1
      WHERE lu1.statusId = 11
      GROUP BY lu1.loanId) AS temp11
      ON temp11.loanId = l.id

    LEFT JOIN (SELECT
        lu1.loanId,
        SUM(ROUND(CalcWorkTime(lu1.createDateTime, lu1.finishedDateTime))) checkerTotalMinute
      -- SUM(ROUND(CalcWorkTimeWithDayFinish(lu1.createDateTime, lu1.finishedDateTime, lu1.id ))) AS checkerTotalMinute
      FROM loanusers lu1
      WHERE lu1.statusId = 11
      GROUP BY lu1.loanId) AS temp11total
      ON temp11total.loanId = l.id

    LEFT JOIN (SELECT
        lu1.loanId,
        SUM(ROUND(CalcWorkTime(lu1.createDateTime, lu1.finishedDateTime))) KMTotalMinute
      -- SUM(ROUND(CalcWorkTimeWithDayFinish(lu1.createDateTime, lu1.finishedDateTime, lu1.id ))) AS checkerTotalMinute
      FROM loanusers lu1
      WHERE lu1.statusId = 4
      GROUP BY lu1.loanId) AS temp4total
      ON temp4total.loanId = l.id

    LEFT JOIN (SELECT
        lu1.loanId,
        SUM(ROUND(CalcWorkTime(lu1.createDateTime, lu1.finishedDateTime))) Ka1ReworkTotalMinute,
        COUNT(lu1.id) AS cnt
      -- SUM(ROUND(CalcWorkTimeWithDayFinish(lu1.createDateTime, lu1.finishedDateTime, lu1.id ))) AS checkerTotalMinute
      FROM loanusers lu1
      WHERE lu1.statusId = 8
      GROUP BY lu1.loanId) AS temp8total
      ON temp8total.loanId = l.id

    LEFT JOIN (SELECT
        lu1.loanId,
        SUM(ROUND(CalcWorkTime(lu1.createDateTime, lu1.finishedDateTime))) totalMinute
      FROM loanusers lu1
      WHERE lu1.statusId = 26
      GROUP BY lu1.loanId) AS temp26total
      ON temp26total.loanId = l.id

    LEFT JOIN (SELECT
        lu1.loanId,
        SUM(ROUND(CalcWorkTime(lu1.createDateTime, lu1.finishedDateTime))) totalMinute
      FROM loanusers lu1
      WHERE lu1.statusId = 42
      GROUP BY lu1.loanId) AS temp42total
      ON temp42total.loanId = l.id

    LEFT JOIN (SELECT
        lu1.loanId,
        SUM(ROUND(CalcWorkTime(lu1.createDateTime, lu1.finishedDateTime))) totalMinute
      FROM loanusers lu1
      GROUP BY lu1.loanId) AS alltotal
      ON alltotal.loanId = l.id

    LEFT JOIN (SELECT
        lu1.loanId,
        SUM(ROUND(CalcWorkTime(lu1.createDateTime, lu1.finishedDateTime))) totalMinuteTo26
      FROM loanusers lu1
      WHERE lu1.statusId NOT IN (26, 27, 28)
      GROUP BY lu1.loanId) AS alltotalto26
      ON alltotalto26.loanId = l.id

    LEFT JOIN (SELECT
        t.id,
        IF(t.sokl_rework_nums IS NOT NULL, t.sokl_rework_nums, 0) AS sokl_rework_nums,
        IF(t.dp_rework_sokl IS NOT NULL, t.dp_rework_sokl, 0) AS dp_rework_sokl,
        IF(t.dz_rework_nums IS NOT NULL, t.dz_rework_nums, 0) AS dz_rework_nums,
        IF(t.dzdp_rework_nums IS NOT NULL, t.dzdp_rework_nums, 0) AS dzdp_rework_nums,
        IF(t.dg_rework_num IS NOT NULL, t.dg_rework_num, 0) AS dg_rework_num,
        IF(t.dgdp_rework_num IS NOT NULL, t.dgdp_rework_num, 0) AS dgdp_rework_num
      FROM (SELECT
          l.id,
          (SELECT
              (COUNT(ld.id))
            FROM loandocs ld
            WHERE ld.subtype IN ('SoklNum1', 'SoklNum', 'SoklNewNum', 'SoklNewDamuNum')
            AND ld.loanId = l.id
            AND ld.isNeedRework = 1
            GROUP BY ld.loanId) AS sokl_rework_nums,
          (SELECT
              (COUNT(ld.id))
            FROM loandocs ld
            WHERE ld.subtype = 'Dpsokl'
            AND ld.loanId = l.id
            AND ld.isNeedRework = 1
            GROUP BY ld.loanId) AS dp_rework_sokl,
          (SELECT
              (COUNT(ld.id))
            FROM loandocs ld
            WHERE ld.subtype IN ('DzNum', 'DzNum1', 'DzNum2', 'DzNum3')
            AND ld.loanId = l.id
            AND ld.isNeedRework = 1
            GROUP BY ld.loanId) AS dz_rework_nums,
          (SELECT
              (COUNT(ld.id))
            FROM loandocs ld
            WHERE ld.subtype IN ('DzdpNum1', 'DzdpNum2', 'DzdpNum3', 'DzdpNum4')
            AND ld.loanId = l.id
            AND ld.isNeedRework = 1
            GROUP BY ld.loanId) AS dzdp_rework_nums,
          (SELECT
              (COUNT(ld.id))
            FROM loandocs ld
            WHERE ld.subtype IN ('DgNum')
            AND ld.loanId = l.id
            AND ld.isNeedRework = 1
            GROUP BY ld.loanId) AS dg_rework_num,
          (SELECT
              (COUNT(ld.id))
            FROM loandocs ld
            WHERE ld.subtype IN ('DgdpNum')
            AND ld.loanId = l.id
            AND ld.isNeedRework = 1
            GROUP BY ld.loanId) AS dgdp_rework_num
        FROM loanrequest l) AS t) AS reWorkCnt
      ON reWorkCnt.id = l.id

    LEFT JOIN (SELECT
        l.id AS LoanId,
        (l.sokl_num + l.sokl_num1 + l.sokl_new_damu_num) * 150 + l.sokl_new_num * 60 + dpsokl * 60 + (dzdp_num + l.dz_num) * 60 + (dzdp_num1 + l.dz_num1) * 90 + (dzdp_num2 + l.dz_num2) * 120 + (dzdp_num3 + l.dz_num3) * 180 + l.dg_num * 30
        + l.dgdp_num * 15 + l.dstermination_num * 10 + l.dsorder_num * 30 + l.dzfuture_num * 40 AS normativMaker,
        (l.sokl_num + l.sokl_num1 + l.sokl_new_damu_num) * 60 + l.sokl_new_num * 30 + dpsokl * 30 + (dzdp_num + l.dz_num) * 20 + (dzdp_num1 + l.dz_num1) * 40 + (dzdp_num2 + l.dz_num2) * 60 + (dzdp_num3 + l.dz_num3) * 80 + l.dg_num * 10
        + l.dgdp_num * 10 + l.dstermination_num * 5 + l.dsorder_num * 10 + l.dzfuture_num * 20 AS normativChecker
      FROM loanrequest l
      WHERE l.typeId IN (1, 2)) AS Normatives
      ON Normatives.LoanId = l.id

  WHERE l.typeId IN (1, 2)
  ORDER BY l.id;
END

Ответы (0 шт):