none
Busca de uma tabela em outra RRS feed

  • Pergunta

  • Boa tarde,

    Tenho uma tabela chamada #Intervalos com datas de Inicio e Fim de um determinado evento do meu processo:

    Inicio

    Fim

    2018-02-22 11:00:00.000

    2018-02-22 12:00:00.000

    2018-02-22 15:00:00.000

    2018-02-22 16:00:00.000

    2018-02-22 20:00:00.000

    2018-02-22 23:00:00.000


    E Tenho uma segunda tabela chamada #Interrupcoes

    Interrupções

    2018-02-22 11:20:00.000

    2018-02-22 20:01:00.000

    2018-02-22 20:30:00.000


    Preciso de um Select que me retorne uma terceira tabela (#Intervalos_chancelados), no mesmo formato da tabela #Intervalos só que criando um novo intervalo a cada interrupção que ocorrer depois de 5 minutos de um Inicio.

    No exemplo acima a tabela #Intervalos_chancelados seria assim:

    Inicio

    Fim

    2018-02-22 11:00:00.000

    2018-02-22 11:20:00.000

    2018-02-22 11:20:00.000

    2018-02-22 12:00:00.000

    2018-02-22 15:00:00.000

    2018-02-22 16:00:00.000

    2018-02-22 20:00:00.000

    2018-02-22 20:30:00.000

    2018-02-22 20:30:00.000

    2018-02-22 23:00:00.000


    Ou seja, o intervalo entre 11 e 12h se transforma em 2 pois teve uma interrupção, o intervalo entre 15 e 16h se mantém inalterado, a interrupção das 20:01hrs é ignorado pois aconteceu a menos de 5 minutos do início de um intervalo, já a interrupção das 20:30 divide o intervalo original das 20 as 23h.

    Se alguém tiver alguma ideia, por favor me ajude.

    quinta-feira, 22 de fevereiro de 2018 18:46

Respostas

Todas as Respostas

  • Boa tarde,

    Experimente mais ou menos dessa forma:

    select
        i.Inicio,
        coalesce
            ((select top(1) r.Interrupcao
              from Interrupcoes as r
              where
                  r.Interrupcao between dateadd(minute, 5, i.Inicio) and i.Fim),
             i.Fim) as Fim
    from Intervalos as i
    
    union all
    
    select
        r.Interrupcao,
        i.Fim
    from Interrupcoes as r
    inner join Intervalos as i
        on r.Interrupcao between dateadd(minute, 5, i.Inicio) and i.Fim
    
    order by 
        Inicio

    Espero que ajude


    Assinatura: http://www.imoveisemexposicao.com.br

    quinta-feira, 22 de fevereiro de 2018 19:16
  • Deleted
    quinta-feira, 22 de fevereiro de 2018 21:29
  • Deleted
    sexta-feira, 23 de fevereiro de 2018 01:19
  • Muito obrigado!
    segunda-feira, 26 de fevereiro de 2018 11:27
  • Bom dia, muito obrigado pela ajuda!

    Sobre as dúvidas:

    1 - Não acontecem interrupções com menos de 5 minutos entre elas por característica do processo, o que acontece é que um início de evento as vezes aparece como interrupção erroneamente, por isso a restrição de 5 minutos de diferença.

    2 - No momento estou fazendo relatórios diários com 5 ou 6 eventos por dia, mas provavelmente vou precisar aumentar isso para relatórios anuais em algum momento.

    Novamente agradeço muito!

    segunda-feira, 26 de fevereiro de 2018 11:32