MySQL иногда в запросе отсутствуют данные - PullRequest
0 голосов
/ 07 мая 2020

У меня есть большой MySQL запрос с объединениями и группировкой по сумме нескольких столбцов. Запрос работает нормально в 99% случаев. Но иногда запрос выполняется неправильно. В сумме отсутствуют некоторые записи.

SELECT NULL                                                                          record_id,
           Max( l_job_id )                                                               job_id,
           Max( p_cycle_id )                                                             cycle_id,
           Max( temp_data.eid )                                                    eid,
           Max( temp_data.eid_add1 )                                               eid_add1,
           Max( temp_data.emp_name )                                                  emp_name,
           Max( temp_data.p_group_ee )                                              p_group_ee,
           Max( temp_data.company_code )                                              company_code,
           Max( temp_data.eg1 )                                                eg1,
           Max( temp_data.eg2 )                                                eg2,
           Max( temp_data.eg3 )                                                eg3,
           Max( temp_data.eg4 )                                                eg4,
           Max( temp_data.pgpdata )                                         pgpdata,
           Max( temp_data.p_period )                                                p_period,
           Max( temp_data.p_date )                                                  p_date,
           temp_data.cp_code                                                     cp_code,
           round(Ifnull( SUM( temp_data.hours ), 0 ), 4)             sum_hours,
           round(Ifnull( SUM( temp_data.hours * temp_data.hpf), 0 ), 4) sum_h_prorated,
           round(Ifnull( SUM( temp_data.amount * temp_data.f_sign ), 0 ), 4)    sum_amount,
           round(Ifnull( SUM( temp_data.amount * temp_data.f_sign * temp_data.afr), 0 ), 4)     sum_amount_prorated,
           round(Ifnull( SUM( temp_data.wage_base ),0), 4)                       wage_base, 
           round(Ifnull( SUM( temp_data.wage_base * temp_data.wbpf), 0), 4) sum_wb_prorated, 
           round(Ifnull( SUM( temp_data.cp_add1 ),0), 4)                         sum_cp_add1,
           round(Ifnull( SUM( temp_data.cp_add1 * temp_data.capf), 0), 4)   sum_cp_add1_prorated,
           temp_data.new_eid                                                       new_eid,
           temp_data.new_eid_add1                                                  new_eid_add1,
           temp_data.ccode                                                     ccode,
           temp_data.cid                                                        cid,
           IF(AVG(temp_data.hpf) <> MAX(temp_data.hpf), 'Multiple', temp_data.hpf)  hpf,
           IF(AVG(temp_data.afr) <> MAX(temp_data.afr), 'Multiple', temp_data.afr)  afr,
           IF(AVG(temp_data.wbpf) <> MAX(temp_data.wbpf), 'Multiple', temp_data.wbpf)   wbpf,
           IF(AVG(temp_data.capf) <> MAX(temp_data.capf), 'Multiple', temp_data.capf)   capf,
           round(if(SUM( temp_data.hours * temp_data.hpf) <> 0, SUM(temp_data.amount * f_sign * temp_data.afr)/SUM( temp_data.hours * temp_data.hpf), 0), 4)        hourly_rate_prorated,
           round(if(SUM( temp_data.wage_base * temp_data.wbpf) <> 0, (SUM(temp_data.amount * f_sign * temp_data.afr)/SUM( temp_data.wage_base * temp_data.wbpf)) * 100, 0), 4)      wb_percent_prorated,
           tax_auth     tax_auth
    FROM   ( SELECT xdpl.eid,
                    xdpl.eid_add1,
                    xdel.emp_name,
                    xdel.p_group                           p_group_ee,
                    xdel.company_code,
                    xdel.emp_group1,
                    xdel.emp_group2,
                    xdel.emp_group3,
                    xdel.emp_group4,
                    xdpl.p_group                           pgpdata,
                    xdpl.p_period,
                    xdpl.p_date,
                    xdpl.p_component,
                    xdpl.tax_auth,
                    xdpl.pyc_add1,
                    xdpl.hours,
                    xmpl.hpf, 
                    xdpl.amount,
                    xmpl.afr, 
                    xdpl.wage_base, 
                    xmpl.wbpf,
                    xmpl.capf,
                    xdpl.unit_of_measure,
                    xdpl.cp_add1,
                    xdpl.ccode,
                    xdpl.cycle_id,
                    xdpl.cid,
                    xmpl.cp_code,
                    IF( xmpl.f_sign = 'Y', -1, 1 ) f_sign,
                    --          Xdt_get_leg_trans_cp_code ( xdpl.p_component, xdpl.tax_auth, xdpl.pyc_add1, xdpl.ccode, xdpl.cid ) cp_code,
                    --          Xdt_get_leg_trans_flip_amt_sign( xdpl.p_component, xdpl.tax_auth, xdpl.pyc_add1, xdpl.ccode, xdpl.cid ) f_sign,
                    xme.new_eid,
                    xme.new_eid_add1
             FROM   XDT_TABLE_ONE xdpl
                    inner join XDT_TABLE_ONE xdel
                            ON xdpl.eid = xdel.eid AND
                               Ifnull( xdpl.eid_add1, '##1' ) = Ifnull( xdel.eid_add1, '##1' ) AND
                               xdpl.cid = xdel.cid AND
                               xdpl.cycle_id = xdel.cycle_id AND
                               xdpl.ccode = xdel.ccode
                    inner join XDT_TABLE_THREE xtplel
                            ON xtplel.eid = xdpl.eid AND
                               Ifnull( xtplel.eid_add1, '##1' ) = Ifnull( xdpl.eid_add1, '##1' ) AND
                               xtplel.cid = xdpl.cid AND
                               xtplel.cycle_id = xdpl.cycle_id AND
                               xtplel.ccode = xdpl.ccode
                    left outer join XDT_TABLE_FOUR xmpl
                                 ON xmpl.p_component = xdpl.p_component AND
                                    ( xmpl.tax_auth = xdpl.tax_auth  OR
                                      ( xmpl.tax_auth IS NULL AND
                                        xdpl.tax_auth IS NULL ) ) AND
                                    ( xmpl.pyc_add1 = xdpl.pyc_add1  OR
                                      ( xmpl.pyc_add1 IS NULL AND
                                        xdpl.pyc_add1 IS NULL ) ) AND
                                    xmpl.ccode = xdpl.ccode AND
                                    xmpl.cid = xdpl.cid INNER JOIN xdt_conf_cp_code xccc on xmpl.cp_code = xccc.cp_code AND xmpl.cid = xccc.cid
                    left outer join XDT_TABLE_FIVE xme
                                 ON xme.leg_eid = xdpl.eid AND
                                    Ifnull ( xme.leg_eid_add1, '##1' ) = Ifnull( xdpl.eid_add1, '##1' ) AND
                                    xme.ccode = xdpl.ccode AND
                                    xme.cid = xdpl.cid 
             WHERE  xdpl.cid = p_cid AND
                    xdpl.cycle_id = p_cycle_id AND 1=1 ) temp_data                            
    GROUP  BY temp_data.cid,temp_data.ccode,IFNULL(temp_data.new_eid,temp_data.eid),IFNULL(temp_data.new_eid_add1,eid_add1),temp_data.cp_code; 

Я не могу найти причину отсутствия данных для суммы здесь. Пожалуйста, поделитесь своими мыслями или помощью. Прокомментируйте, если вам нужна дополнительная информация.

...