none
Pegar data anterior quando a Entrada for maior que a saída RRS feed

  • Pergunta

  • Fala Pessoal!

    Estou com o seguinte problema:

    Estou gerando uma query que aponta lado a lado as entradas e saidas dos funcionários. Na query utilizo 3 tabelas temporárias (entrada, saida e emparelhada, onde nesta última eu listo as entradas/saidas lado a lado, como abaixo)

    Por exemplo

    Entrada- 10:00   Saida-11:00
    Entrada- 12:00   Saida-13:00
    Entrada- 14:00   Saida-15:00
    Entrada- 16:00   Saida-17:00

    Quando eu executo a query apontando como horário de execução às 10 horas ou antes, ele me coloca tudo lado a lado direitinho, trazendo o horario na coluna ENTRADA e saida na coluna SAIDA.

    Acontece que, caso eu gere a query às 10:15 por exemplo, a query já não contabiliza a Entrada então nisso ele joga primeiramente o horário de coluna ENTRADA e a próxima entrada na coluna SAÍDA; 

    Ex:

    Entrada- 12:00   Saida-11:00
    Entrada- 14:00   Saida-13:00
    Entrada- 16:00   Saida-15:00
    Entrada- 16:00   Saida-17:00

    Alguem sabe como posso resolver isso?

    quinta-feira, 18 de abril de 2013 19:32

Respostas

Todas as Respostas

  • Boa tarde Riccow,

    Qual a query que você esta utilizando para retornar as informações?

    Poderia mostrar a mesma para vermos o que poderia ser?

    Adriano

    quinta-feira, 18 de abril de 2013 20:00
  • Segue Adriano:

    -- Inserindo na tabela de Entradas
    SELECT NomeUsuario, EventDateTime,
    ROW_NUMBER() OVER ( PARTITION BY Events.IDNumber ORDER BY Events.IDNumber, EventDateTime ) AS rownum
    INTO Entradas
    FROM Events
    WHERE 
    EventDateTime BETWEEN @_lblBD_StartTime AND @_lblBD_EndTime
    ORDER BY EventDateTime DESC
    --SELECT * FROM Entradas

    --Inserindo na tabela de Saidas
    SELECT NomeUsuario, EventDateTime,
    ROW_NUMBER() OVER ( PARTITION BY Events.CHID ORDER BY Events.CHID, EventDateTime ) AS rownum
    INTO Saidas
    FROM Events
    WHERE 
    EventDateTime BETWEEN @_lblBD_StartTime AND @_lblBD_EndTime
    ORDER BY EventDateTime DESC
    --SELECT * FROM Saidas


    --Concatenando Entradas/Saidas
    SELECT Entradas.Nome, 
    Entradas.IdNumber, 
    Entradas.EventTime AS Entrada, Saidas.EventTime AS Saida, Saidas.rownum
    INTO Intervalos
    FROM Entradas
    LEFT JOIN Saidas ON Entradas.IdNumber = Saidas.IDNumber
    AND Entradas.rownum = Saidas.rownum
    ORDER BY Entrada

    select * from Intervalos

    quinta-feira, 18 de abril de 2013 20:09
  • alguem arrista? rs

    quinta-feira, 18 de abril de 2013 22:01
  • Deleted
    • Marcado como Resposta Riccow quinta-feira, 18 de abril de 2013 22:24
    quinta-feira, 18 de abril de 2013 22:18
  •   Caso exista aqui algum programador free-lancer, estou procurando para esta qry.

      obrigado

    quinta-feira, 18 de abril de 2013 22:30
  • Riccow,

    Fiquei com a mesma dúvida do José.

    Neste caso na tabela events você tem algum campo que identifica qual é o registro de entrada e saida?

    A partir do exemplo que vc mandou mande tamém como estão os dados na tabela events?

    Adriano

    sexta-feira, 19 de abril de 2013 14:09