Tabela com periodos
Olá,
Estou com um problema e não estou encontrando a solução e gostaria da ajuda de alguém se possível!
Tenho uma tabela com períodos e valores, ex:
id hora_i hora_f valor
1 08:00 12:00 10,00
2 12:00 18:00 15,00
3 18:00 00:00 20,00
4 00:00 08:00 15,00
Eu tenho gravado em outra tabela o período de permanencia de um usuário, por exemplo, das 08:30 as 14:30.
Eu preciso calcular a quantidade de horas e valor por periodo, por exemplo:
Horas utilizadas: 06:00
-------------------------------------------
Horario utilizado: 08:00:00 / 12:00:00 Valor/Hora R$ 10
Horas dentro desse periodo: 03:30
Valor dentro desse periodo: 35,00
-------------------------------------------
Horario utilizado: 12:00:00 / 18:00:00 Valor/Hora R$ 15
Horas dentro desse periodo: 02:30
Valor dentro desse periodo: 37,50
-------------------------------------------
Até ai tudo bem, o problema é quando o período avança de um dia para o outro, por exemplo, as 20:30 as 02:30, ai a rotina se perde pois a hora final é menor que a inicial e soma tudo errado.
Alguém pode dar uma luz de como resolver esse problema?
Grato,
Renato
Estou com um problema e não estou encontrando a solução e gostaria da ajuda de alguém se possível!
Tenho uma tabela com períodos e valores, ex:
id hora_i hora_f valor
1 08:00 12:00 10,00
2 12:00 18:00 15,00
3 18:00 00:00 20,00
4 00:00 08:00 15,00
Eu tenho gravado em outra tabela o período de permanencia de um usuário, por exemplo, das 08:30 as 14:30.
Eu preciso calcular a quantidade de horas e valor por periodo, por exemplo:
Horas utilizadas: 06:00
-------------------------------------------
Horario utilizado: 08:00:00 / 12:00:00 Valor/Hora R$ 10
Horas dentro desse periodo: 03:30
Valor dentro desse periodo: 35,00
-------------------------------------------
Horario utilizado: 12:00:00 / 18:00:00 Valor/Hora R$ 15
Horas dentro desse periodo: 02:30
Valor dentro desse periodo: 37,50
-------------------------------------------
Até ai tudo bem, o problema é quando o período avança de um dia para o outro, por exemplo, as 20:30 as 02:30, ai a rotina se perde pois a hora final é menor que a inicial e soma tudo errado.
Alguém pode dar uma luz de como resolver esse problema?
Grato,
Renato
Renatotm
Curtidas 0
Respostas
Facc
18/11/2008
experimente gravar a data do periodo, e qndo for calcular, basta verificar a data
GOSTEI 0
Renatotm
18/11/2008
O período do usuário eu já gravo como data/hora, mas o problema é que na rotina, quando vou fazer o select pra pegar o próximo período e o mesmo é o que termina as 00:00:00, o select não retorna nada, pois o horário final é menor que o inicial do período, ou seja, 00:00:00 é menor que 18:00:00.
É exatamente nesse ponto que eu travei!
É exatamente nesse ponto que eu travei!
GOSTEI 0
Jair Bg
18/11/2008
faça uma critica:
SE (horario inicial > horário final) , FAÇA
CALCULO_1 : (24:00 - horario inicial) = tempo1
CALCULO_2 : (horario final - 00:00) = tempo2
SOME (calculo 1 + calculo 2)
PS isso pode ser feito num SELECT como não sei qual o DB que voce está usando !!... CASE WHEN...
SE (horario inicial > horário final) , FAÇA
CALCULO_1 : (24:00 - horario inicial) = tempo1
CALCULO_2 : (horario final - 00:00) = tempo2
SOME (calculo 1 + calculo 2)
PS isso pode ser feito num SELECT como não sei qual o DB que voce está usando !!... CASE WHEN...
GOSTEI 0
Renatotm
18/11/2008
Jair,
Não entendi muito bem!
Eu uso firebird em minha aplicação, mas fiz um teste direto no delphi e não entendi muito bem!
Por exemplo, utilizei como período 18/11/2008 14:12:00 a 19/11/2008 02:12:00.
Nesse caso, eu teria que utilizar os períodos 2,3 e 4 da minha tabela conforme citado, mas fazendo os calculos que você sugeriu, cheguei ao valor 12:00 que é o tempo total, porém meu problema é relacionado a como pegar os períodos da tabela e calcular os valores para cada horário dentro do período fornecido, ou seja, iniciou as 14:12 então começa no item 2 da tabela, utilizando tantas horas nesse período e totalizando X, depois utiliza tantas horas do item 3 da tabela e assim sucessivamente.
Grato,
Renato
Não entendi muito bem!
Eu uso firebird em minha aplicação, mas fiz um teste direto no delphi e não entendi muito bem!
Por exemplo, utilizei como período 18/11/2008 14:12:00 a 19/11/2008 02:12:00.
Nesse caso, eu teria que utilizar os períodos 2,3 e 4 da minha tabela conforme citado, mas fazendo os calculos que você sugeriu, cheguei ao valor 12:00 que é o tempo total, porém meu problema é relacionado a como pegar os períodos da tabela e calcular os valores para cada horário dentro do período fornecido, ou seja, iniciou as 14:12 então começa no item 2 da tabela, utilizando tantas horas nesse período e totalizando X, depois utiliza tantas horas do item 3 da tabela e assim sucessivamente.
Grato,
Renato
GOSTEI 0
Jair Bg
18/11/2008
Bem desculpe devia ter me expressado melhor, é o seguinte: no id 3º sua hora final não pode ser 00:00 tem que ser 24:00 (23:59:59);
o que coloquei é que se voce fizer uso em um interval entre o ´ID 3º e o 4º´ você obviamente terá que calcular em duas partes de intervalo, apenas isso...
No caso coloquei dois calculos por causa da virada do horário independetemente do dia.
o que coloquei é que se voce fizer uso em um interval entre o ´ID 3º e o 4º´ você obviamente terá que calcular em duas partes de intervalo, apenas isso...
No caso coloquei dois calculos por causa da virada do horário independetemente do dia.
GOSTEI 0
Renatotm
18/11/2008
Jair,
Obrigado pela ajuda!
Eu já tinha alterado o horario pra 23:59:59, mas não estava funcionando pois tinha um erro na rotina.
Agora já alterei e esta funcionando direito.
Mais uma vez obrigado!
Renato
Obrigado pela ajuda!
Eu já tinha alterado o horario pra 23:59:59, mas não estava funcionando pois tinha um erro na rotina.
Agora já alterei e esta funcionando direito.
Mais uma vez obrigado!
Renato
GOSTEI 0