Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Leonardo Ferreira_136274

[Resolvido] Calculando saldo de banco de horas

Recommended Posts

Fala Pessoal, preciso de uma ajuda de vocês.

 

Tenho um banco de dados gerado por um leitor de digitais, onde, para cada registro, ele guarda, o número do relógio, o tipo de checagem (entrada (010), saída (011)), a data (formato yyy-mm-dd hh:mm:ss.000), e o cartão da pessoa (9999).

 

O sistema deve no final mostrar quanto a pessoa está de crédito ou débito no final de cada dia e ao final de cada mês.

 

Ele já está fazendo isso, porém, a cada alteração a ser feita, é quase um parto. Tem alguma forma de se fazer isso direto via SQL?

 

Fica abaixo um exemplo:

 

CREATE TABLE [dbo].[registro](

[NumInner] [int] NULL,

[Tipo] [char](3) NULL,

[Data] [datetime] NULL,

[Cartao] [char](16) NULL

) ON [PRIMARY]

 

NumInner__Tipo__Data____________________Cartão

1_________010__2011-04-04 07:10:00.000____0073

1_________011__2011-04-04 11:25:00.000____0073

1_________010__2011-04-04 12:20:00.000____0073

1_________011__2011-04-04 17:30:00.000____0073

 

 

Neste caso seria:

 

Entrada Saída Entrada Saída

07:10_______11:25__12:20_____17:30

 

1º saldo___2º saldo____Tt hrs___Saldo Final (supondo jornada de 08:00 hrs)

04:15______05:10_______09:25____01:25

 

Desde já agradeço pela ajuda.

 

Att.

 

Leonardo

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não entendi bem mas a subtração de duas datas dá a diferença em dias (ou fração) entre elas, o resto seria só fazer as contas de minutos etc.

Já vi este tema por aqui em Banco de Dados (Sql Server) inclusive, tente ver se acha algo útil no Pesquisar.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não entendi bem mas a subtração de duas datas dá a diferença em dias (ou fração) entre elas, o resto seria só fazer as contas de minutos etc.

Já vi este tema por aqui em Banco de Dados (Sql Server) inclusive, tente ver se acha algo útil no Pesquisar.

 

O grande lance é que estão em registros diferentes não é no mesmo registro.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Join com a mesma tabela, supondo (NumInner/cartao) seja a chave ;

 

select r_nt.NumInner , r_ent.cartao , r_ent.data data_ent, r_sai.data data_sai
from registro r_ent,registro r_sai
where r_ent.NumInner = r_sai.NumInner
and r_ent.cartao = r_sai.cartao
and r_ent.tipo = '010'
and r_sai.tipo = '011'

Compartilhar este post


Link para o post
Compartilhar em outros sites

Join com a mesma tabela, supondo (NumInner/cartao) seja a chave ;

 

select r_nt.NumInner , r_ent.cartao , r_ent.data data_ent, r_sai.data data_sai
from registro r_ent,registro r_sai
where r_ent.NumInner = r_sai.NumInner
and r_ent.cartao = r_sai.cartao
and r_ent.tipo = '010'
and r_sai.tipo = '011'

 

 

Rapaz, muito massa! Com sua dica do auto-relacionamento cheguei ao seguinte SQL:

 

Segue a resolução que encontrei para o meu problema:

 

select r_hr1.cartao , r_hr1.data data_ent1, r_hr2.data data_sai1,r_hr3.data data_ent2, r_hr4.data data_sai2
from registro r_hr1,registro r_hr2, registro r_hr3,registro r_hr4

where 

(r_hr1.cartao = r_hr2.cartao) and (r_hr1.cartao = r_hr3.cartao) and 
(r_hr1.cartao = r_hr4.cartao) and (r_hr2.cartao = r_hr3.cartao) and 
(r_hr2.cartao = r_hr4.cartao) and (r_hr3.cartao = r_hr4.cartao) and 

r_hr1.tipo = '010' and r_hr2.tipo = '011' and 
r_hr3.tipo = '010' and r_hr4.tipo = '011' and

CONVERT(VARCHAR(12),r_hr1.data,103) = CONVERT(VARCHAR(12),r_hr2.data,103) and 
CONVERT(VARCHAR(12),r_hr1.data,103) = CONVERT(VARCHAR(12),r_hr3.data,103) and 
CONVERT(VARCHAR(12),r_hr1.data,103) = CONVERT(VARCHAR(12),r_hr4.data,103) and 
CONVERT(VARCHAR(12),r_hr2.data,103) = CONVERT(VARCHAR(12),r_hr3.data,103) and 
CONVERT(VARCHAR(12),r_hr2.data,103) = CONVERT(VARCHAR(12),r_hr4.data,103) and 
CONVERT(VARCHAR(12),r_hr3.data,103) = CONVERT(VARCHAR(12),r_hr4.data,103) and 

CONVERT(VARCHAR(12),r_hr1.data,108) <> CONVERT(VARCHAR(12),r_hr2.data,108) and 
CONVERT(VARCHAR(12),r_hr1.data,108) <> CONVERT(VARCHAR(12),r_hr3.data,108) and 
CONVERT(VARCHAR(12),r_hr1.data,108) <> CONVERT(VARCHAR(12),r_hr4.data,108) and 
CONVERT(VARCHAR(12),r_hr2.data,108) <> CONVERT(VARCHAR(12),r_hr3.data,108) and 
CONVERT(VARCHAR(12),r_hr2.data,108) <> CONVERT(VARCHAR(12),r_hr4.data,108) and 
CONVERT(VARCHAR(12),r_hr3.data,108) <> CONVERT(VARCHAR(12),r_hr4.data,108) and 

CONVERT(VARCHAR(12),r_hr1.data,108) < CONVERT(VARCHAR(12),r_hr3.data,108) and 
CONVERT(VARCHAR(12),r_hr2.data,108) < CONVERT(VARCHAR(12),r_hr4.data,108) and 

order by cartao, r_hr1.data, r_hr2.data, r_hr3.data, r_hr4.data

 

 

Muito obrigado mesmo!

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.