Inquiridor
Relacionar dias uteis

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 0e 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
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
----------------------------------------------------------
-
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
-
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
----------------------------------------------------------
- Editado William John Adam Trindade quarta-feira, 7 de outubro de 2015 15:39
-
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. */
-
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
-
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
-
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.
-