Jump to content
Sign in to follow this  
asacap1000

Minutos em horas e minutos

Recommended Posts

Galera acredito que seja muito fácil mas a cabeça não ta ajudando em nada hoje, preciso pegar o resultado deste select em HH:mm.

 

Mas não consigo acertar de jeito nenhum

 

o campo é este:

 

TRUNC ((io.time_out - io.time_in)* 1440) minutos,

 

Se eu não colocar *1440 ele faz a contagem por dia.

o que está faltando neste select, já coloquei *24, /24, /60, *60 etc etc e não sai nada certo

Share this post


Link to post
Share on other sites

beleza após analisar seu link, cheguei a estes valores.A principio voltaram corretos.

 

select datas.nr_entrada,
to_char(trunc(datas.minutos / 60 / 60), '09') ||
to_char(trunc(mod(datas.minutos, 3600) / 60), '09') ||
to_char(mod(mod(datas.minutos, 3600), 60), '09')
from
(select TRUNC((io.time_out - io.time_in) * 1440) minutos ...) datas

 

está me trazendo dia hora e minutos interessante que está excluindo os finais de semana

beleza após analisar seu link, cheguei a estes valores.A principio voltaram corretos.

 

select datas.nr_entrada,
to_char(trunc(datas.minutos / 60 / 60), '09') ||
to_char(trunc(mod(datas.minutos, 3600) / 60), '09') ||
to_char(mod(mod(datas.minutos, 3600), 60), '09')
from
(select TRUNC((io.time_out - io.time_in) * 1440) minutos ...) datas

 

está me trazendo dia hora e minutos interessante que está excluindo os finais de semana

 

 

Como exemplo tenho estas datas saida (segunda) 09.02.2015 08:22:09 - entrada (sexta feira) 06.02.2015 19:22:52.

ele me retorna isso 01: 00: 59

Edited by asacap1000

Share this post


Link to post
Share on other sites
...interessante que está excluindo os finais de semana ...

 

 

¡¿?!

Share this post


Link to post
Share on other sites

 

¡¿?!

rsrsrsr eu também não entendi.

Vou postar o select inteiro para ter idéia do rolo.

select datas.nr_entrada,datas.entrada,datas.saída,to_char(trunc(datas.minutos /60/60),'09') ||':'||
 to_char(trunc(mod(datas.minutos ,3600)/60),'09') ||':'||
 to_char(mod(mod(datas.minutos ,3600),60),'09')duração
  from (select io.id_in_out nr_entrada,
                TO_CHAR(io.time_in,'DD/MM/YYYY HH24:MI:SS')ENTRADA,                
                TO_CHAR(io.time_out,'DD/MM/YYYY HH24:MI:SS')SAÍDA,
                TRUNC ((io.time_out - io.time_in)* 1440) minutos,
                case
                  when (select p.typ_document
                          from in_out_pos p
                         where p.lager = io.lager
                           and p.id_in_out = io.id_in_out
                           and rownum = 1) in
                       ('DTA', 'DTC', 'DI', 'CARGA', 'IMP', 'MICDTA', 'TERMO') then
                   'IMPORTAÇÃO'
                  when (select p.typ_document
                          from in_out_pos p
                         where p.lager = io.lager
                           and p.id_in_out = io.id_in_out
                           and rownum = 1) is null then
                   'INDEFINIDO'
                  else
                   'EXPORTAÇÃO'
                end tp_lote,
                upper(sp.name) tranportadora,
                v.plate placa,
                case
                  when io.art_in_out = 'LI' then
                   (select we.instru_arm
                      from in_out_pos iop, we
                     where iop.lager = io.lager
                       and iop.id_in_out = io.id_in_out
                       and we.lager = iop.lager
                       and we.typ_doc = iop.typ_document
                       and we.nr_doc = iop.document
                       and we.nr_zoll = iop.container_num
                       and rownum = 1)
                  else
                   ''
                end inst_arm,
                case
                  when io.art_in_out in
                       ('ECV', 'LI', 'MIC', 'RCC', 'RCV', 'VS') then
                   'ENTRADA'
                  else
                   'SAÍDA'
                end sentido,
        decode(length(kl.suchbegriff),
              14,
              substr(kl.suchbegriff, 1, 2) || '.' ||
              substr(kl.suchbegriff, 3, 3) || '.' ||
              substr(kl.suchbegriff, 6, 3) || '/' ||
              substr(kl.suchbegriff, 9, 4) || '-' ||
              substr(kl.suchbegriff, 13, 2),
              substr(kl.suchbegriff, 1, 3) || '.' ||
              substr(kl.suchbegriff, 4, 3) || '.' ||
              substr(kl.suchbegriff, 7, 3) || '-' ||
              substr(kl.suchbegriff, 10, 2)),
                upper(kl.name) cliente,
                (select upper(s.bez)
                   from stati s
                  where s.stat_ber = 'INOUT'
                    and s.stat = io.stat
                    and rownum = 1) status,
                case
                  when io.art_in_out in
                       ('ECV', 'LI', 'MIC', 'RCC', 'RCV', 'VS') and
                       (select count(1)
                          from in_out_pos iop, we
                         where iop.lager = io.lager
                           and iop.id_in_out = io.id_in_out
                           and we.lager = iop.lager
                           and we.typ_doc = iop.typ_document
                           and we.nr_doc = iop.document
                           and we.nr_zoll = iop.container_num
                           and we.stat <> '90') = 0 then
                   'CONCLUIDO'
                  when io.art_in_out not in
                       ('ECV', 'LI', 'MIC', 'RCC', 'RCV', 'VS') and
                       (select count(1)
                          from in_out_pos iop, auftraege a
                         where iop.lager = io.lager
                           and iop.id_in_out = io.id_in_out
                           and a.lager = iop.lager
                           and replace(replace(a.hinw_zust, '/', ''), '-', '') =
                               iop.document
                           and a.art_auf = 'NORM'
                           and a.stat <= 75) = 0 then
                   'CONCLUIDO'
                  else
                   'PENDENTE'
                end status_oper
           from in_out io, vehicle v, spediteure sp, klienten kl
          where trunc
         (io.time_arrival) >= TO_DATE('&inicio','DD/MM/YYYY HH24:MI:SS')
       and trunc (io.time_arrival) <= TO_DATE('&fim','DD/MM/YYYY HH24:MI:SS')
     and io.lager = 'PSI'
       and io.stat <> '80'
       and io.lager = v.lager(+)
       and io.id_vehicle = v.id_vehicle(+)
       and io.lager = sp.lager(+)
       and io.id_spediteur = sp.id_spediteur(+)
       and io.lager = kl.lager(+)
       and io.id_klient = '&client'
       and io.id_klient = kl.id_klient(+)
          order by io.time_arrival)datas

Share this post


Link to post
Share on other sites

Pensei em algo to tipo só o horário a data como que fixada

 

Vi um sistema que gravava em dois campos um para data (a hora ficava zerada) e outro para hora (a data ficava com o 1º dia do mês)

 

Não me pergunte porque, mas neste caso justificaria uma diferença de sábados/domingos.

Share this post


Link to post
Share on other sites

Estou reabrindo este chamado pois após um mês de testes encontrei um "bug". O select atual está desta forma hoje.

SELECT COUNT(CLC.TICKET) QUANT_ENTRADAS,
       decode(length(CLC.CNPJ),
              14,
              substr(CLC.CNPJ, 1, 2) || '.' || substr(CLC.CNPJ, 3, 3) || '.' ||
              substr(CLC.CNPJ, 6, 3) || '/' || substr(CLC.CNPJ, 9, 4) || '-' ||
              substr(CLC.CNPJ, 13, 2),
              substr(CLC.CNPJ, 1, 3) || '.' || substr(CLC.CNPJ, 4, 3) || '.' ||
              substr(CLC.CNPJ, 7, 3) || '-' || substr(CLC.CNPJ, 10, 2)) CNPJ,
       CLC.CLIENTE,
       to_char(trunc(sum(CLC.MINUTOS_PERCORRIDOS) / 24 / 60), '00009') || ':' ||
       to_char(trunc(mod(sum(CLC.MINUTOS_PERCORRIDOS), 3600) / 60), '09') || ':' ||
       to_char(mod(mod(sum(CLC.MINUTOS_PERCORRIDOS), 3600), 60), '09') TOTAL_PERCORRIDO,
       
       to_char(trunc(avg(NVL(CLC.MINUTOS_PERCORRIDOS, 0)) / 24 / 60),
               '0009') || ':' ||
       to_char(trunc(mod(avg(NVL(CLC.MINUTOS_PERCORRIDOS, 0)), 3600) / 60),
               '09') || ':' ||
       to_char(mod(mod(avg(NVL(CLC.MINUTOS_PERCORRIDOS, 0)), 3600), 60),
               '09') MEDIA_PERCORRIDA,
       
       to_char(trunc(max(NVL(CLC.MINUTOS_PERCORRIDOS, 0)) / 24 / 60),
               '0009') || ':' ||
       to_char(trunc(mod(max(NVL(CLC.MINUTOS_PERCORRIDOS, 0)), 3600) / 60),
               '09') || ':' ||
       to_char(mod(mod(max(NVL(CLC.MINUTOS_PERCORRIDOS, 0)), 3600), 60),
               '09') MAXIMO_PERCORRIDO,
       
       to_char(trunc(min(NVL(CLC.MINUTOS_PERCORRIDOS, 0)) / 24 / 60),
               '0009') || ':' ||
       to_char(trunc(mod(min(NVL(CLC.MINUTOS_PERCORRIDOS, 0)), 3600) / 60),
               '09') || ':' ||
       to_char(mod(mod(min(NVL(CLC.MINUTOS_PERCORRIDOS, 0)), 3600), 60),
               '09') MINIMO_PERCORRIDA
  FROM (select distinct io.id_in_out ticket,
                        k.id_klient,
                        k.suchbegriff CNPJ,
                        k.name cliente,
                        TO_CHAR(io.time_arrival, 'DD/MM/YYYY HH24:MI:SS') chegada,
                        TO_CHAR(io.time_release_in, 'DD/MM/YYYY HH24:MI:SS') liberacao,
                        TO_CHAR(io.time_in, 'DD/MM/YYYY HH24:MI:SS') entrada,
                        TO_CHAR(io.time_out, 'DD/MM/YYYY HH24:MI:SS') saida,
                        case
                          when (select max(doc.datum_integridade)
                                  from doccontrol doc, in_out_pos iop
                                 where doc.document = iop.document
                                   and iop.id_in_out = io.id_in_out) is null then
                           TRUNC((io.time_release_pp - io.time_in) * 1440)
                        
                          when (select max(doc.datum_integridade)
                                  from doccontrol doc, in_out_pos iop
                                 where doc.document = iop.document
                                   and iop.id_in_out = io.id_in_out) >
                               io.time_release_pp then
                           TRUNC(((select max(doc.datum_integridade)
                                     from doccontrol doc, in_out_pos iop
                                    where doc.document = iop.document
                                      and iop.id_in_out = io.id_in_out) -
                                 io.time_release_pp) * 1440)
                          else
                           TRUNC((io.time_release_pp -
                                 (select max(doc.datum_integridade)
                                     from doccontrol doc, in_out_pos iop
                                    where doc.document = iop.document
                                      and iop.id_in_out = io.id_in_out)) * 1440)
                        end MINUTOS_PERCORRIDOS,
                        case
                          when (select p.typ_document
                                  from in_out_pos p
                                 where p.lager = io.lager
                                   and p.id_in_out = io.id_in_out
                                   and rownum = 1) in
                               ('DTA',
                                'DTC',
                                'DI',
                                'CARGA',
                                'IMP',
                                'MICDTA',
                                'TERMO') then
                           'IMPORTAÇÃO'
                          when (select p.typ_document
                                  from in_out_pos p
                                 where p.lager = io.lager
                                   and p.id_in_out = io.id_in_out
                                   and rownum = 1) is null then
                           'INDEFINIDO'
                          else
                           'EXPORTAÇÃO'
                        end tp_lote,
                        case
                          when io.art_in_out = 'LI' then
                           (select we.instru_arm
                              from in_out_pos iop, we
                             where iop.lager = io.lager
                               and iop.id_in_out = io.id_in_out
                               and we.lager = iop.lager
                               and we.typ_doc = iop.typ_document
                               and we.nr_doc = iop.document
                               and we.nr_zoll = iop.container_num
                               and rownum = 1)
                          else
                           ''
                        end inst_arm,
                        case
                          when io.art_in_out in
                               ('ECV', 'LI', 'MIC', 'RCC', 'RCV', 'VS') then
                           'ENTRADA'
                          else
                           'SAÍDA'
                        end sentido,
                        
                        (select upper(s.bez)
                           from stati s
                          where s.stat_ber = 'INOUT'
                            and s.stat = io.stat
                            and rownum = 1) status,
                        case
                          when io.art_in_out in
                               ('ECV', 'LI', 'MIC', 'RCC', 'RCV', 'VS') and
                               (select count(1)
                                  from in_out_pos iop, we
                                 where iop.lager = io.lager
                                   and iop.id_in_out = io.id_in_out
                                   and we.lager = iop.lager
                                   and we.typ_doc = iop.typ_document
                                   and we.nr_doc = iop.document
                                   and we.nr_zoll = iop.container_num
                                   and we.stat <> '90') = 0 then
                           'CONCLUIDO'
                          when io.art_in_out not in
                               ('ECV', 'LI', 'MIC', 'RCC', 'RCV', 'VS') and
                               (select count(1)
                                  from in_out_pos iop, auftraege a
                                 where iop.lager = io.lager
                                   and iop.id_in_out = io.id_in_out
                                   and a.lager = iop.lager
                                   and replace(replace(a.hinw_zust, '/', ''),
                                               '-',
                                               '') = iop.document
                                   and a.art_auf = 'NORM'
                                   and a.stat <= 75) = 0 then
                           'CONCLUIDO'
                          else
                           'PENDENTE'
                        end status_oper
          from in_out_pos iop, klienten k, in_out io
         where k.id_klient = iop.id_klient
           and io.id_in_out = iop.id_in_out
           and io.stat <> '80'
           and (case
                 when io.art_in_out in
                      ('ECV', 'LI', 'MIC', 'RCC', 'RCV', 'VS') then
                  'ENTRADA'
                 else
                  'SAÍDA'
               end) <> 'SAÍDA'
           and trunc(io.time_arrival) >=
               TO_DATE('&inicio', 'DD/MM/YYYY HH24:MI:SS')
           and trunc(io.time_arrival) <=
               TO_DATE('&fim', 'DD/MM/YYYY HH24:MI:SS')
           and k.id_klient like '&cliente'
           AND ( case when (select p.typ_document
                                  from in_out_pos p
                                 where p.lager = io.lager
                                   and p.id_in_out = io.id_in_out
                                   and rownum = 1) in
                               ('DTA',
                                'DTC',
                                'DI',
                                'CARGA',
                                'IMP',
                                'MICDTA',
                                'TERMO') then
                           'IMPORTAÇÃO'
                          when (select p.typ_document
                                  from in_out_pos p
                                 where p.lager = io.lager
                                   and p.id_in_out = io.id_in_out
                                   and rownum = 1) is null then
                           'INDEFINIDO'
                          else
                           'EXPORTAÇÃO'
                        end) = '&tipo'
           and (case
                 when io.art_in_out = 'LI' then
                  (select we.instru_arm
                     from in_out_pos iop, we
                    where iop.lager = io.lager
                      and iop.id_in_out = io.id_in_out
                      and we.lager = iop.lager
                      and we.typ_doc = iop.typ_document
                      and we.nr_doc = iop.document
                      and we.nr_zoll = iop.container_num
                      and rownum = 1)
                 else
                  ''
               end) = '&instrucao') CLC
 GROUP BY CLC.CLIENTE,
           decode(length(CLC.CNPJ),
                 14,
                 substr(CLC.CNPJ, 1, 2) || '.' || substr(CLC.CNPJ, 3, 3) || '.' ||
                 substr(CLC.CNPJ, 6, 3) || '/' || substr(CLC.CNPJ, 9, 4) || '-' ||
                 substr(CLC.CNPJ, 13, 2),
                 substr(CLC.CNPJ, 1, 3) || '.' || substr(CLC.CNPJ, 4, 3) || '.' ||
                 substr(CLC.CNPJ, 7, 3) || '-' || substr(CLC.CNPJ, 10, 2))
 ORDER BY CLC.CLIENTE ASC

Existem casos que na consulta ele me retorna com a quantidade de horas acima de 24. Como exemplo abaixo na pesquisa de um determinado cliente ele me mostra a quantidade de entradas 15, soma o tempo total gasto no processo de cada entrada me retornando 09 dias 58 horas 33 minutos. O que deve estar errado na montagem?

 

QUANT_ENTRADAS CÓD_CLIENTE CNPJ CLIENTE TOTAL_PERCORRIDO MEDIA_PERCORRIDA MAXIMO_PERCORRIDO MINIMO_PERCORRIDO 15 códi cnpj cliente ​ 00009: 58: 33 000: 15: 54 000: 23: 21 000: 03: 05

 

 

Existe um subselect que transforma os tempos em minutos, está no case.

case
                          when (select max(doc.datum_integridade)
                                  from doccontrol doc, in_out_pos iop
                                 where doc.document = iop.document
                                   and iop.id_in_out = io.id_in_out) is null then
                           TRUNC((io.time_release_pp - io.time_in) * 1440)
                        
                          when (select max(doc.datum_integridade)
                                  from doccontrol doc, in_out_pos iop
                                 where doc.document = iop.document
                                   and iop.id_in_out = io.id_in_out) >
                               io.time_release_pp then
                           TRUNC(((select max(doc.datum_integridade)
                                     from doccontrol doc, in_out_pos iop
                                    where doc.document = iop.document
                                      and iop.id_in_out = io.id_in_out) -
                                 io.time_release_pp) * 1440)
                          else
                           TRUNC((io.time_release_pp -
                                 (select max(doc.datum_integridade)
                                     from doccontrol doc, in_out_pos iop
                                    where doc.document = iop.document
                                      and iop.id_in_out = io.id_in_out)) * 1440)
                        end MINUTOS_PERCORRIDOS,

Estou reabrindo este chamado pois após um mês de testes encontrei um "bug". O select atual está desta forma hoje.

SELECT COUNT(CLC.TICKET) QUANT_ENTRADAS,
       decode(length(CLC.CNPJ),
              14,
              substr(CLC.CNPJ, 1, 2) || '.' || substr(CLC.CNPJ, 3, 3) || '.' ||
              substr(CLC.CNPJ, 6, 3) || '/' || substr(CLC.CNPJ, 9, 4) || '-' ||
              substr(CLC.CNPJ, 13, 2),
              substr(CLC.CNPJ, 1, 3) || '.' || substr(CLC.CNPJ, 4, 3) || '.' ||
              substr(CLC.CNPJ, 7, 3) || '-' || substr(CLC.CNPJ, 10, 2)) CNPJ,
       CLC.CLIENTE,
       to_char(trunc(sum(CLC.MINUTOS_PERCORRIDOS) / 24 / 60), '00009') || ':' ||
       to_char(trunc(mod(sum(CLC.MINUTOS_PERCORRIDOS), 3600) / 60), '09') || ':' ||
       to_char(mod(mod(sum(CLC.MINUTOS_PERCORRIDOS), 3600), 60), '09') TOTAL_PERCORRIDO,
       
       to_char(trunc(avg(NVL(CLC.MINUTOS_PERCORRIDOS, 0)) / 24 / 60),
               '0009') || ':' ||
       to_char(trunc(mod(avg(NVL(CLC.MINUTOS_PERCORRIDOS, 0)), 3600) / 60),
               '09') || ':' ||
       to_char(mod(mod(avg(NVL(CLC.MINUTOS_PERCORRIDOS, 0)), 3600), 60),
               '09') MEDIA_PERCORRIDA,
       
       to_char(trunc(max(NVL(CLC.MINUTOS_PERCORRIDOS, 0)) / 24 / 60),
               '0009') || ':' ||
       to_char(trunc(mod(max(NVL(CLC.MINUTOS_PERCORRIDOS, 0)), 3600) / 60),
               '09') || ':' ||
       to_char(mod(mod(max(NVL(CLC.MINUTOS_PERCORRIDOS, 0)), 3600), 60),
               '09') MAXIMO_PERCORRIDO,
       
       to_char(trunc(min(NVL(CLC.MINUTOS_PERCORRIDOS, 0)) / 24 / 60),
               '0009') || ':' ||
       to_char(trunc(mod(min(NVL(CLC.MINUTOS_PERCORRIDOS, 0)), 3600) / 60),
               '09') || ':' ||
       to_char(mod(mod(min(NVL(CLC.MINUTOS_PERCORRIDOS, 0)), 3600), 60),
               '09') MINIMO_PERCORRIDA
  FROM (select distinct io.id_in_out ticket,
                        k.id_klient,
                        k.suchbegriff CNPJ,
                        k.name cliente,
                        TO_CHAR(io.time_arrival, 'DD/MM/YYYY HH24:MI:SS') chegada,
                        TO_CHAR(io.time_release_in, 'DD/MM/YYYY HH24:MI:SS') liberacao,
                        TO_CHAR(io.time_in, 'DD/MM/YYYY HH24:MI:SS') entrada,
                        TO_CHAR(io.time_out, 'DD/MM/YYYY HH24:MI:SS') saida,
                        case
                          when (select max(doc.datum_integridade)
                                  from doccontrol doc, in_out_pos iop
                                 where doc.document = iop.document
                                   and iop.id_in_out = io.id_in_out) is null then
                           TRUNC((io.time_release_pp - io.time_in) * 1440)
                        
                          when (select max(doc.datum_integridade)
                                  from doccontrol doc, in_out_pos iop
                                 where doc.document = iop.document
                                   and iop.id_in_out = io.id_in_out) >
                               io.time_release_pp then
                           TRUNC(((select max(doc.datum_integridade)
                                     from doccontrol doc, in_out_pos iop
                                    where doc.document = iop.document
                                      and iop.id_in_out = io.id_in_out) -
                                 io.time_release_pp) * 1440)
                          else
                           TRUNC((io.time_release_pp -
                                 (select max(doc.datum_integridade)
                                     from doccontrol doc, in_out_pos iop
                                    where doc.document = iop.document
                                      and iop.id_in_out = io.id_in_out)) * 1440)
                        end MINUTOS_PERCORRIDOS,
                        case
                          when (select p.typ_document
                                  from in_out_pos p
                                 where p.lager = io.lager
                                   and p.id_in_out = io.id_in_out
                                   and rownum = 1) in
                               ('DTA',
                                'DTC',
                                'DI',
                                'CARGA',
                                'IMP',
                                'MICDTA',
                                'TERMO') then
                           'IMPORTAÇÃO'
                          when (select p.typ_document
                                  from in_out_pos p
                                 where p.lager = io.lager
                                   and p.id_in_out = io.id_in_out
                                   and rownum = 1) is null then
                           'INDEFINIDO'
                          else
                           'EXPORTAÇÃO'
                        end tp_lote,
                        case
                          when io.art_in_out = 'LI' then
                           (select we.instru_arm
                              from in_out_pos iop, we
                             where iop.lager = io.lager
                               and iop.id_in_out = io.id_in_out
                               and we.lager = iop.lager
                               and we.typ_doc = iop.typ_document
                               and we.nr_doc = iop.document
                               and we.nr_zoll = iop.container_num
                               and rownum = 1)
                          else
                           ''
                        end inst_arm,
                        case
                          when io.art_in_out in
                               ('ECV', 'LI', 'MIC', 'RCC', 'RCV', 'VS') then
                           'ENTRADA'
                          else
                           'SAÍDA'
                        end sentido,
                        
                        (select upper(s.bez)
                           from stati s
                          where s.stat_ber = 'INOUT'
                            and s.stat = io.stat
                            and rownum = 1) status,
                        case
                          when io.art_in_out in
                               ('ECV', 'LI', 'MIC', 'RCC', 'RCV', 'VS') and
                               (select count(1)
                                  from in_out_pos iop, we
                                 where iop.lager = io.lager
                                   and iop.id_in_out = io.id_in_out
                                   and we.lager = iop.lager
                                   and we.typ_doc = iop.typ_document
                                   and we.nr_doc = iop.document
                                   and we.nr_zoll = iop.container_num
                                   and we.stat <> '90') = 0 then
                           'CONCLUIDO'
                          when io.art_in_out not in
                               ('ECV', 'LI', 'MIC', 'RCC', 'RCV', 'VS') and
                               (select count(1)
                                  from in_out_pos iop, auftraege a
                                 where iop.lager = io.lager
                                   and iop.id_in_out = io.id_in_out
                                   and a.lager = iop.lager
                                   and replace(replace(a.hinw_zust, '/', ''),
                                               '-',
                                               '') = iop.document
                                   and a.art_auf = 'NORM'
                                   and a.stat <= 75) = 0 then
                           'CONCLUIDO'
                          else
                           'PENDENTE'
                        end status_oper
          from in_out_pos iop, klienten k, in_out io
         where k.id_klient = iop.id_klient
           and io.id_in_out = iop.id_in_out
           and io.stat <> '80'
           and (case
                 when io.art_in_out in
                      ('ECV', 'LI', 'MIC', 'RCC', 'RCV', 'VS') then
                  'ENTRADA'
                 else
                  'SAÍDA'
               end) <> 'SAÍDA'
           and trunc(io.time_arrival) >=
               TO_DATE('&inicio', 'DD/MM/YYYY HH24:MI:SS')
           and trunc(io.time_arrival) <=
               TO_DATE('&fim', 'DD/MM/YYYY HH24:MI:SS')
           and k.id_klient like '&cliente'
           AND ( case when (select p.typ_document
                                  from in_out_pos p
                                 where p.lager = io.lager
                                   and p.id_in_out = io.id_in_out
                                   and rownum = 1) in
                               ('DTA',
                                'DTC',
                                'DI',
                                'CARGA',
                                'IMP',
                                'MICDTA',
                                'TERMO') then
                           'IMPORTAÇÃO'
                          when (select p.typ_document
                                  from in_out_pos p
                                 where p.lager = io.lager
                                   and p.id_in_out = io.id_in_out
                                   and rownum = 1) is null then
                           'INDEFINIDO'
                          else
                           'EXPORTAÇÃO'
                        end) = '&tipo'
           and (case
                 when io.art_in_out = 'LI' then
                  (select we.instru_arm
                     from in_out_pos iop, we
                    where iop.lager = io.lager
                      and iop.id_in_out = io.id_in_out
                      and we.lager = iop.lager
                      and we.typ_doc = iop.typ_document
                      and we.nr_doc = iop.document
                      and we.nr_zoll = iop.container_num
                      and rownum = 1)
                 else
                  ''
               end) = '&instrucao') CLC
 GROUP BY CLC.CLIENTE,
           decode(length(CLC.CNPJ),
                 14,
                 substr(CLC.CNPJ, 1, 2) || '.' || substr(CLC.CNPJ, 3, 3) || '.' ||
                 substr(CLC.CNPJ, 6, 3) || '/' || substr(CLC.CNPJ, 9, 4) || '-' ||
                 substr(CLC.CNPJ, 13, 2),
                 substr(CLC.CNPJ, 1, 3) || '.' || substr(CLC.CNPJ, 4, 3) || '.' ||
                 substr(CLC.CNPJ, 7, 3) || '-' || substr(CLC.CNPJ, 10, 2))
 ORDER BY CLC.CLIENTE ASC

Existem casos que na consulta ele me retorna com a quantidade de horas acima de 24. Como exemplo abaixo na pesquisa de um determinado cliente ele me mostra a quantidade de entradas 15, soma o tempo total gasto no processo de cada entrada me retornando 09 dias 58 horas 33 minutos. O que deve estar errado na montagem?

TOTAL ENTRADAS 15
TEMPO TOTAL EM DIAS HORAS E MINUTOS 00009: 58: 33
MÉDIA EM DIAS HORAS E MINUTOS	    000: 15: 54
MÁXIMO EM DIAS HORAS E MINUTOS	    000: 23: 21
MÍNIMO EM DIAS HORAS E MINUTOS	    000: 03: 05

Existe um subselect que transforma os tempos em minutos, está no case.

case
                          when (select max(doc.datum_integridade)
                                  from doccontrol doc, in_out_pos iop
                                 where doc.document = iop.document
                                   and iop.id_in_out = io.id_in_out) is null then
                           TRUNC((io.time_release_pp - io.time_in) * 1440)
                        
                          when (select max(doc.datum_integridade)
                                  from doccontrol doc, in_out_pos iop
                                 where doc.document = iop.document
                                   and iop.id_in_out = io.id_in_out) >
                               io.time_release_pp then
                           TRUNC(((select max(doc.datum_integridade)
                                     from doccontrol doc, in_out_pos iop
                                    where doc.document = iop.document
                                      and iop.id_in_out = io.id_in_out) -
                                 io.time_release_pp) * 1440)
                          else
                           TRUNC((io.time_release_pp -
                                 (select max(doc.datum_integridade)
                                     from doccontrol doc, in_out_pos iop
                                    where doc.document = iop.document
                                      and iop.id_in_out = io.id_in_out)) * 1440)
                        end MINUTOS_PERCORRIDOS,

 

Share this post


Link to post
Share on other sites

Não entendi o problema , tentou "abrir" a consulta para ver7car os valores ?

Share this post


Link to post
Share on other sites

Então os resultados de uma certa forma estão corretos, por exemplo se eu deixar para aparecer apenas horas e minutos blz, só que se eu adicionar a opção de dias aí fica estranho a infromação pois como exemplo ele irá mostrar.

 

09:58:33 => 09 dias 58 horas e 33 minutos. Como 58 horas? Acredito que teria que ter uma regra para que no calculo de horas quando ultrapassar 23 horas ele volta a zerar porém acrescentaria nos dias

Share this post


Link to post
Share on other sites

to_char(mod(mod(sum(CLC.MINUTOS_PERCORRIDOS), 3600), 60), '09') TOTAL_PERCORRIDO,

 

Nao deveria ser 24 no lugar de 60 ?

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.