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.
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
Curtir tópico
+ 0
Responder
Clique aqui para fazer login e interagir na Comunidade :)