none
Relacionar dias uteis RRS feed

  • Pergunta

  • Bom dia a todos,

    Venho a vocês pedir um apoio na situação abaixo.

    Tenho duas tabelas com as seguintes estruturas:

    TABELA1 - Interações

    Result:

    CodChamado Equipe Data_Hora

    ABC Abertura 2011-04-25 08:00

    ABC Atendimento 2011-04-26 13:30

    ABC Atendimento 2011-04-28 10:34

    ABC Desenvolv. 2011-04-30 09:34

    ABC Desenvolv. 2011-05-03 08:25

    ABC SQA 2011-05-15 15:00

    TABELA2 - Dia Util

    Data DiaSemana DiaSemanaNum Dia Mes NomeMes Ano DiaUtil

    2009-01-01 00:00:00.000 Thursday 5 1 1 January 2009 0
    2009-01-02 00:00:00.000 Friday 6 2 1 January 2009 1
    2009-01-03 00:00:00.000 Saturday 7 3 1 January 2009 0

    e assim por diante até o dia de hoje.....

    Os dados da TABELA1 são interações que fazemos para manter registro entre as equipes. Então o chamado chega no atendimento, se identificado um problema vai o desenvolvimento e na sequencia passa pelo time de SQA. As datas ali presentes são referentes a quando a atividade foi realizada.

    Como forma de monitoramento da equipe, quero saber quanto tempo (Em horas) cada equipe atuou com a demanda. Neste caso agrupo as equipes e calculo o intervalo de tempo de atuação delas. Até aqui, OK, consigo fazer.

    Meu problema é fazer este agrupamento e fazer a conta somente dos dias úteis, onde o dia util é considerado de 08:00 as 12:00 e 13:30 as 18:00

    Exemplo:

    Interação 0 = 02/10/2015 17:00 (Abertura) - Sexta-feira

    Interação 1 = 04/10/2015 10:00 - Domingo

    Interação 2 = 05/10/2015 10:00 - Segunda-Feira

    Interação 3 = 05/10/2015 14:30 - Segunda-Feira

    O resultado é: 06 horas uteis

    Considerando que meu intervalo de corte é de 08 as 12 e 13:30 as 18, temos:

    Interação 0 = 01 hora, Interação 1 = 0  horas, Interação 2 = 02 horas e interação 3 = 3 horas

    Não sei se ficou claro.

    Abs. e desde já obrigado.

    Marco.


    Marco Antônio Pinheiro / MCTS - MCC http://marcoantoniopinheiro.blogspot.com

    quarta-feira, 7 de outubro de 2015 14:45

Todas as Respostas

  • Voce disse:

    "

    Interação 0 = 02/10/2015 17:00 (Abertura) - Sexta-feira

    Interação 1 = 04/10/2015 10:00 - Domingo

    Interação 2 = 05/10/2015 10:00 - Segunda-Feira

    Interação 3 = 05/10/2015 14:30 - Segunda-Feira

    O resultado é: 06 horas uteis

    "

    Como é que vc chegou nesse resultado de 6 horas se voce tem somente uma data? Para isso vc teria que ter uma hora inicio (abertura) e uma hora fim (fechamento) da interaçao.

    Nao ficou claro para mim, pelo menos

    att


    William John Adam Trindade
    Analyste-programmeur
    ----------------------------------------------------------

    quarta-feira, 7 de outubro de 2015 14:57
  • Preciso saber a diferença entre as interações.

    Então quanto tempo temos entre interação 0 e interação 1?

    Neste caso pego 04/10/2015 10:00 - 02/10/2015 17:00

    Se considerarmos horas cheias temos que o intervalo nos dá: 41 horas.

    Contudo, preciso saber este resultado em horas uteis usando o intervalo da jornada de trabalho informada. Desta forma o resultado desta primeira conta é 01 hora. Pois como dia 04 é domingo, não entra na conta. Então fica 02/10/2015 17:00 até as 18:00, ou seja, 01 hora.

    E assim por diante com as outras interações.

    O que não consegui fazer é relacionar a tabela de interações com a tabela de dia uteis e saber essa diferença entre as interações.

    Ficou mais claro?

    Abs.,


    Marco Antônio Pinheiro / MCTS - MCC http://marcoantoniopinheiro.blogspot.com

    quarta-feira, 7 de outubro de 2015 15:10
  • E se voce tiver somente a interaçao 0??  Quantas horas serao computadas?

    >Então fica 02/10/2015 17:00 até as 18:00,

    Cada interaçao é de somente uma hora? de onde saiu esse 18:00?

    Att


    William John Adam Trindade
    Analyste-programmeur
    ----------------------------------------------------------


    quarta-feira, 7 de outubro de 2015 15:37
  • Marco Antônio,

    Como você tem dois campos datetime e um tem as horas, você precisa fazer o join fazendo um cast das colunas.

    create table #Interacao (grupo varchar(20), data_hora datetime)
    go
    insert into #interacao values
    ('dev', '2015-10-01 10:00'),('dev', '2015-10-01 16:00'),
    ('dev', '2015-10-02 11:00'),
    ('dev', '2015-10-03 10:00'),
    ('dev', '2015-10-05 16:00'),
    ('dev', '2015-10-06 09:15'),
    ('dev', '2015-10-07 14:30'),
    ('dev', '2015-10-08 13:30'),
    ('dev', '2015-10-08 13:15')
    GO
    create table #dia_util (data datetime, diaSemanaNum tinyint, DiaUtil bit)
    GO
    insert into #dia_util values 
    ('2015-10-01',5,1),('2015-10-02',6,1),('2015-10-03',7,0),('2015-10-04',1,1),('2015-10-05',2,0),('2015-10-06',3,1),('2015-10-07',4,1),('2015-10-08',5,1)
    GO
    
    select data_hora, 
           case
      		when datepart(hour,data_hora) = 13 and datepart(MINUTE,data_hora) < 30 then 0
    	    when datepart(hour,data_hora)
    	       between 08 and 12 then 12 - datepart(hour,data_hora)
    		when datepart(hour,data_hora)
    		  between 13 and 18 then 18 - datepart(hour,data_hora)
    		end
    from #Interacao i
    join #dia_util d
    on cast(d.data as date)= cast(i.data_hora as date)
    where DiaUtil = 1

    Veja se esse exemplo te dá um norte... 

    Mas veja que eu estou levando em conta que a interação tem como final o 'corte' das 12 ou 18 horas, uma vez que você não tem uma data final da interação.

    E outra coisa... coloquei um case que zera a interação caso tenha inicio antes das 13:30, mas aí deixo para você adaptar.

    Qualquer coisa, é só falar.

    []'s!


    /* Logan Destefani Merazzi - DBA | @LoganMerazzi | http://www.merazzi.eti.br | Se a resposta for útil, vote nela. Se resolveu, marque-a como resposta. */

    quarta-feira, 7 de outubro de 2015 16:39
  • William,

    As 18:00 é do horário padrão do dia. O intervalo é de 08 as 12 e 13:30 as 18

    Se uma interação foi feita as 17 hs, logo o tempo máximo daquele dia será de 1 hora.

    Se uma interação foi feita as 14 hs, logo o tempo máximo daquele dia será de 4 horas....e assim sucessivamente.


    Marco Antônio Pinheiro / MCTS - MCC http://marcoantoniopinheiro.blogspot.com

    quarta-feira, 7 de outubro de 2015 16:55
  • Logan,

    Avaliando o resultado a diferença da primeira interação com a segunda tem que ser de 04:30....da segunda pra terceira de 5 horas.

    Pelo que entendi você está apenas considerando meu período de 08 as 18 e subtraindo da data_hora da interação.

    No caso preciso considerar a diferença entre interações, e considerando o período de trabalho.


    Marco Antônio Pinheiro / MCTS - MCC http://marcoantoniopinheiro.blogspot.com

    quarta-feira, 7 de outubro de 2015 17:21
  • Olá Marco Antônio Pinheiro,

    Conseguiu resolver a sua dúvida?

    Atenciosamente


    Marcos Roberto de Souza Junior

    Esse conteúdo e fornecido sem garantias de qualquer tipo, seja expressa ou implícita

    MSDN Community Support

    Por favor, lembre-se de Marcar como Resposta as respostas que resolveram o seu problema. Essa e uma maneira comum de reconhecer aqueles que o ajudaram e fazer com que seja mais fácil para os outros visitantes encontrarem a resolução mais tarde.

    terça-feira, 13 de outubro de 2015 18:03
  • Marcos,

    Ainda não. Continua pendente.

    Se alguém conseguir apoiar, agradeço.

    Abs.,

    Marco.


    Marco Antônio Pinheiro / MCTS - MCC http://marcoantoniopinheiro.blogspot.com

    quarta-feira, 14 de outubro de 2015 16:51