Calculo_de campo usando TIMESTAMP EM POSTGRESQL

10/04/2019

0

Ola,

Calculo_de campo usando TIMESTAMP EM POSTGRESQL

Estou com duas duvidas para realizar a seguinte tarefa, ou não sei! desculpe minha ignorância.

Primeiro duvida....

Tenho uma tabela chamada ponto com chave composta, atributo matricula e datadia, do tipo TIMESTAMP.

No dois exemplo abaixo a pessoa entra e sai da empresa, dentro de sua jornada de trabalho, sendo que contem duas jornadas de trabalho 08:00 as 12:00 é 12 :00 as 18:00.

No exemplo 1, a matricula 1212 entrou para sua jornada no horário normal 12:00, porem teve que sair para resolver um problema particular saiu as 15:00, logo voltou as 16:00 é esqueceu de bater o ponto de sair da empresa, que seria 18:00.

No exemplo 2, a matricula 1313 a pessoa fez sua jornada normal de 08:00 as 12:00

Tenho que fazer um calcular para sabe se esta com horas positivas ou negativas.

segue abaixo a table para melhor entendimento.

CREATE TABLE pontos
(
matricula integer NOT NULL,
datadia timestamp without time zone NOT NULL,
CONSTRAINT chave_primaria_composta PRIMARY KEY (matricula, datadia),
CONSTRAINT chave_primaria FOREIGN KEY (matricula)
REFERENCES pessoa (matricula) MATCH SIMPLE
ON UPDATE NO ACTION ON DELETE NO ACTION
)

Exemplo 1

Matricula Data dia

1212 2019-03-08 12:00:00
1212 2019-03-08 15:00:00
1212 2019-03-08 16:00:00

soma: Horas trabalhadas ->

Exemplo 2

Matricula Data dia

1313 2019-03-08 08:00:00
1313 2019-03-08 12:00:00

soma: Horas trabalhadas -> 04:00:00

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Duvida 2;

SELECT PESSOA.MATRICULA, PESSOA.NOME, PONTOS.DATADIA

FROM PESSOA

INNER JOIN PONTOS

ON PESSOA.MATRICULA = PONTOS.MATRICULA AND PESSOA.MATRICULA = 1010

WHERE CAST(datadia AS Date) Between ''''''''''''''''2019-03-26'''''''''''''''' AND ''''''''''''''''2019-03-26''''''''''''''''



1010;"ASIS DE OLIVEIRA";"2019-03-26 12:00:33.096"

1010;"ASIS DE OLIVEIRA";"2019-03-26 15:00:40.113"

1010;"ASIS DE OLIVEIRA";"2019-03-26 16:05:47.489"

1010;"ASIS DE OLIVEIRA";"2019-03-26 18:00:00.265"



Pego esses valores coloco em variável e realizo os cálculos, essa situação, a pessoa teve seu dia trabalho de 4:55, sabendo que essa pessoa trabalha 6:00 por dia, 12:00 as 18:00, o calulo e feito usando somente horas e minutos.

No dia normal de trabalho a pessoa tem 2 registro, porém pode ter mais ou somente um.

Tem momento que a pessoa esquece de registar o ponto, porém pode ser justificado manualmente pelo gesto responsável.

CASO 2

SELECT PESSOA.MATRICULA, PESSOA.NOME, PONTOS.DATADIA

FROM PESSOA

INNER JOIN PONTOS

ON PESSOA.MATRICULA = PONTOS.MATRICULA AND PESSOA.MATRICULA = 1212

WHERE CAST(datadia AS Date) Between ''''''''''''''''2019-03-26'''''''''''''''' AND ''''''''''''''''2019-03-26''''''''''''''''



1212;"RONALDO OLIVEIRA";"2019-03-26 12:00:33.096"

1212;"RONALDO OLIVEIRA";"2019-03-26 15:00:40.113"

1212;"RONALDO OLIVEIRA";"2019-03-26 16:00:47.489"



No caso 2, e pessoa esqueceu de registar o ponto de saída, as 18:00 no caso.

CASO 3



SELECT PESSOA.MATRICULA, PESSOA.NOME, PONTOS.DATADIA

FROM PESSOA

INNER JOIN PONTOS

ON PESSOA.MATRICULA = PONTOS.MATRICULA AND PESSOA.MATRICULA = 1212

WHERE CAST(datadia AS Date) Between ''''''''''''''''2019-03-01'''''''''''''''' AND ''''''''''''''''2019-03-30''''''''''''''''



1212;"RONALDO OLIVEIRA";"2019-03-01 12:00:33.096"

1212;"RONALDO OLIVEIRA";"2019-03-01 18:00:40.113"

1212;"RONALDO OLIVEIRA";"2019-03-02 12:00:47.489"

1212;"RONALDO OLIVEIRA";"2019-03-02 18:00:47.489"

1212;"RONALDO OLIVEIRA";"2019-03-03 12:00:47.489" <<<<<<------------------

1212;"RONALDO OLIVEIRA";"2019-03-04 12:00:47.489"

1212;"RONALDO OLIVEIRA";"2019-03-04 18:00:47.489"

1212;"RONALDO OLIVEIRA";"2019-03-05 12:00:47.489"

1212;"RONALDO OLIVEIRA";"2019-03-05 18:00:47.489"

…..

No caso 3 onde a pessoa não registrou o ponto de saída, somente de entrada. (<<<<------)

Dentro dessa pesquisa e possível tira a batida ímpares?

Imagem somente para ilustrar a ideia.

Desde já agradeço pela ajuda e atenção.
Brenno Lima

Brenno Lima

Responder

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar