MySQL Script para encontrar encontrar falta de uma entrada de um grupo específico e, em seguida, introduza a linha em falta no grupo

0

Pergunta

Eu tenho uma tabela ClockIn , que é a seguinte:

Id Carimbo de data / hora WorkDayId Códigodofuncionário Tipo
1 2021-10-19 08:00:00 148 1 Início
2 2021-10-19 10:00:00 148 1 Fim
3 2021-10-19 11:00:00 148 1 Início
4 2021-10-19 08:00:00 149 2 Início
5 2021-10-19 17:00:00 149 2 Fim

A tabela é basicamente utilizando para o comparecimento do empregado. Eu preciso escrever um script SQL que irá encontrar o funcionário que tenha qualquer iniciar , mas esqueceu de colocar fim do tempo (Significa que ele não tem linhas por Tipo=final, mas tem de começar. NB: Um funcionário pode ter vários Iniciar e Terminar no mesmo dia).

Primeiro eu preciso descobrir o que o funcionário e, em seguida, para inserir a falta Fim de linha para o empregado. E Fim do intervalo de tempo será a hora de ínicio, hora + 8hrs.

Eu estou usando o banco de dados do MySql, então eu estou tentando escrever um MySql script. Eu preciso usar uma tabela temporária ou procedimento para isso. Eu estou totalmente preso como fazer isso. Qualquer ajuda seria apreciar, por favor.

1

Melhor resposta

1

Verifique com NOT EXISTS outro registro para o mesmo empregado, no mesmo dia, "Acabar" com o carimbo de data / hora é depois que o carimbo de data / hora para "Começar"

SELECT a.*
FROM ClockIn a
WHERE a.Type = 'Start'
AND NOT EXISTS (
  SELECT 1
  FROM ClockIn b
  WHERE b.EmployeeId = a.EmployeeId
  AND a.WorkDayId = b.WorkDayId
  AND a.Timestamp < b.Timestamp
  AND b.Type = 'End'
);

https://dbfiddle.uk/?rdbms=mysql_8.0&fiddle=bf83dfce56500b12cc945848e94e8b9a

Exemplos no link acima também inclui um INSERT instrução para criar o registo de "Fim", mas é uma questão se sempre adicionar 8 horas a partir de "Start".

2021-10-22 04:12:40

Uso massivo de que NÃO EXISTE ;)
Abhijit Mondal Abhi

Em outros idiomas

Esta página está em outros idiomas

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................