Ir para conteúdo
Fórum Script Brasil
  • 0

(Resolvido) Retornar os intervalos de um dia


isaikki

Pergunta

Boa tarde pessoal

To com um problema em uma consulta, vou explicar o problema:

Eu tenho uma tabela que grava a alocação de pessoas, mas as pessoas tem que parar a alocação quando saem para almoçar ou lanchar, etc... eu queria uma consulta que retornasse esses intervalos, com a hora de início do intervalo e a hora que entrou em outra alocação... complicado...

Eu ia fazer com loop, mas como não manjo muito bem de loop...

Tentei fazendo o DATEDIFF da hora de saída do dia menos o DATEDIFF da hora de entrada do dia, para retornar o tempo total do dia, e a mesma coisa para somar a hora alocada durante esse dia, daí peguei o total e diminuí pela hora alocada, e retornou exatamente os minutos parados durante o dia... o único problema é que eu preciso que me retorne também a hora de início e a hora final do intervalo

A tabela tem esses campos: (codigoAlocacao, data, inicioAlocacao, terminoAlocacao, codigoPessoa)

Desde já agradeço a ajuda

Link para o comentário
Compartilhar em outros sites

7 respostass a esta questão

Posts Recomendados

  • 0

Boa tarde isaikki,

Utilize o Datediff entre os horários de terminoAlocacao e inicioAlocacao. Mas ao invés de pegar na mesma linha, você pegará o término da alocação da 1ª linha e fará a diferença do início da alocação da 2ª linha. Para isto, as linhas devem estar ordenadas pelo início da alocação.

Ex.:

inicioAlocacao | terminoAlocacao

08:00 | 09:00

09:30 | 10:40

Faça a diferença entre 09:00 e 09:30 hs.

Link para o comentário
Compartilhar em outros sites

  • 0

Boa tarde isaikki,

Fiz uma implementação simples com 3 linhas, apenas para exemplificar. Caso seja isto, faça as adaptações necessárias....

-- criação de tabela temporária
create table #Tabela (codigoAlocacao int, inicioAlocacao DATETIME, terminoAlocacao DATETIME)

-- inserção dos dados
INSERT INTO #tabela VALUES (5, '2011-12-02 08:00', '2011-12-02 09:00')
INSERT INTO #tabela VALUES (8, '2011-12-02 10:50', '2011-12-02 11:00')
INSERT INTO #tabela VALUES (7, '2011-12-02 09:30', '2011-12-02 10:40')

---rode daqui até o fim
DECLARE @Codigo AS INT
DECLARE @Inicio AS DATETIME
DECLARE @Termino AS DATETIME

SET @Codigo=0

SET @Codigo = (SELECT top 1 codigoAlocacao FROM #Tabela where codigoAlocacao>@Codigo ORDER BY codigoAlocacao)
SET @Termino = (SELECT top 1 terminoAlocacao FROM #Tabela WHERE codigoAlocacao=@Codigo)

WHILE 0=0
BEGIN
SET @Codigo = (SELECT top 1 codigoAlocacao FROM #Tabela where codigoAlocacao>@Codigo ORDER BY codigoAlocacao)
SET @Inicio = (SELECT top 1 inicioAlocacao FROM #Tabela WHERE codigoAlocacao=@Codigo)    

print DATEDIFF (mi, @Termino, @Inicio)

SET @Termino = (SELECT top 1 terminoAlocacao FROM #Tabela WHERE codigoAlocacao=@Codigo)
IF (ISDATE(@Inicio)=0) break
END

Link para o comentário
Compartilhar em outros sites

  • 0

Cara, show de bola!!!

Entendi aqui o uso do WHILE, pelo que eu vi dá pra adaptar para o que eu quero!

Agora, só mais uma pergunta: como eu faço pra, na mesma linha que ele retorna o intervalo, colocar a hora, por exemplo, como outra coluna? Tentei colocar outro print, mas ele mostra na linha de baixo

Muito obrigado mesmo!

Editado por isaikki
Link para o comentário
Compartilhar em outros sites

  • 0

Concatena as informações no mesmo print... mas ai você terá q converter pra caracter, porque senão o sql vai tentar somar os valores e dará erro de tipo. No exempo coloquei a hora inicial:

---rode daqui até o fim
DECLARE @Codigo AS INT
DECLARE @Inicio AS DATETIME
DECLARE @Termino AS DATETIME

SET @Codigo=0

SET @Codigo = (SELECT top 1 codigoAlocacao FROM #Tabela where codigoAlocacao>@Codigo ORDER BY codigoAlocacao)
SET @Termino = (SELECT top 1 terminoAlocacao FROM #Tabela WHERE codigoAlocacao=@Codigo)

WHILE 0=0
BEGIN
SET @Codigo = (SELECT top 1 codigoAlocacao FROM #Tabela where codigoAlocacao>@Codigo ORDER BY codigoAlocacao)
SET @Inicio = (SELECT top 1 inicioAlocacao FROM #Tabela WHERE codigoAlocacao=@Codigo)    

print cast (DATEDIFF (mi, @Termino, @Inicio) AS VARCHAR) + ' Horas:' + convert(varchar, @Inicio, 108)

SET @Termino = (SELECT top 1 terminoAlocacao FROM #Tabela WHERE codigoAlocacao=@Codigo)
IF (ISDATE(@Inicio)=0) break
END

Qualquer dúvida, pode postar!! :.)

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,2k
    • Posts
      652k
×
×
  • Criar Novo...