
Concatenar Campos De Horarios
#1
Posted 10/03/2010, 11:31
estou com um problema a um tempo, e não estou conseguindo encontrar uma forma de resolve-lo
é o seguinte:
eu tenho uma tabela que possui determinados horarios de acesso a um sistema. Ex.:
+-------+
| hora |
+-------+
| 07:59 |
| 08:31 |
| 08:37 |
| 08:38 |
| 08:39 |
| 08:41 |
| 08:42 |
| 08:43 |
| 08:44 |
| 08:59 |
| 09:00 |
| 09:01 |
+-------+
O objetivo é fazer um select somando todos os minutos (caso a diferença entre os horarios seja de 1 minuto) e mostrar o primeiro horario o ultimo horario e o total.
Caso a diferença de um horario para outro seja maior de um minuto, devera ser contabilizado somente 1 minuto. O retorno da tabela acima deve ser o seguinte:
+-------------------------------+
| hora_ini | hora_fim | TOTAL |
+-------------------------------+
| 07:59 | 07:59 | 1 |
| 08:31 | 08:31 | 1 |
| 08:37 | 08:39 | 2 |
| 08:41 | 08:44 | 3 |
| 08:59 | 09:01 | 2 |
---------------------------------
Será que alguem pode me dar uma luz por favor?
Agradeço antecipadamente pela atenção de todos!
#2
Posted 10/03/2010, 14:49
Link: MySql Manual - Date and Time Functions [timediff]
Poderia me esclarecer algumas coisas?
Como assim?! Se logo após você apresenta essa tabela:O objetivo é fazer um select somando todos os minutos (caso a diferença entre os horarios seja de 1 minuto) e mostrar o primeiro horario o ultimo horario e o total.
Caso a diferença de um horario para outro seja maior de um minuto, devera ser contabilizado somente 1 minuto.
O retorno da tabela acima deve ser o seguinte:
+-----------------------------+
| hora_ini | hora_fim | total |
+-----------------------------+
| 07:59 | 07:59 | 1 |
| 08:31 | 08:31 | 1 |
| 08:37 | 08:39 | 2 |
| 08:41 | 08:44 | 3 |
| 08:59 | 09:01 | 2 |
+-----------------------------+
Seguindo a primeira citação acredito que seja + ou - assim:
select
'08:41' as hora_ini,
'08:44' as hora_fim,
case
when timediff('08:41', '08:44') < -1 then 1
else timediff('08:41', '08:44')
end as total,
'08:41 - 08:44 =' as calculo,
timediff('08:41', '08:44') as resultado;
Caso contrário:
select
'08:41' as hora_ini,
'08:44' as hora_fim,
extract(minute from timediff('08:41', '08:44')) as total,
'08:41 - 08:44 =' as calculo,
timediff('08:41', '08:44') as resultado;
Espero que tenha ajudado!

Edição feita por: Renan L. Queiroz, 10/03/2010, 15:16.
Especialidade: Desenvolvimento e Banco de Dados.
Este post lhe ajudou? Agradeça:
#3
Posted 10/03/2010, 17:07
A primeira tabela:
+-------+
| hora |
+-------+
| 07:59 |
| 08:31 |
| 08:37 |
| 08:38 |
| 08:39 |
| 08:41 |
| 08:42 |
| 08:43 |
| 08:44 |
| 08:59 |
| 09:00 |
| 09:01 |
+-------+
é uma tabela que armazena quando ocorre um acesso no sistema e quanto tempo o usuario fica logado....ou seja, quando ocorre o acesso no sistema é logado o horario de entrada.
E caso o usuário permaneça on-line no sistema, será logado a cada 1 minuto no banco de Dados.
Neste caso temos duas situações a primeira (conforme tabela acima) o usuario logou no sistema às 07:59 e saiu antes de dar um minuto. Neste caso ficou logado somente o horario de entrada.
Esta situação aconteceu novamente às 08:31. O usuario entrou no sistema e saiu antes de um minuto.
O segundo Caso é o seguinte
O usuario entrou no sistema às 08:37 permaneceu às 08:38, 08:39 e saiu do sistema
Essa situação aconteceu novamente às 08:41, até 8:44.
O que eu quero é o seguinte:
Fazer um select que com base nessas informações gere uma nova tabela, da seguinte forma:
Caso o usuario entre no sistema e saia antes de um minuto (primeiro exemplo), o select deve indicar que o usuario entrou e saiu do sistema no mesmo horario e contabilizar 1 minuto de uso.
ou seja
entrou 07:59, saiu 07:59, utilizou o sistema 1 minuto.
E quando acontece do usuario ficar mais tempo logado no sistema, o select deve fazer o calculo e me retornar quando que o usuario entrou no sistema e quando ele saiu.
ou seja
entrou às 08:37, saiu as 08:39, utilizou o sistema 2 minutos.
Obs.: eu nao faço ideia quais sao os horarios, a tabela acima é apenas para ajudar no entendimento

Resumindo, "Na linguagem de programação" eu preciso comparar o primeiro horario com o segundo, Se a diferença entre eles for maior de 1 minuto, eu coloco na tabela o primeiro horario e contabilizo 1 minuto.
Se a diferença entre eles for igual a um minuto eu insiro o primeiro horario como hora de inicio, e comparo o segundo horario com o terceiro, e assim por diante...ate a diferença for maior de 1 minuto, quando for eu insiro na tabela como horario final e contabilizo a diferença entre a hora de inicio e de final.
Esperto ter esclarecido, melhor

Obrigado pela ajuda!!
#4
Posted 10/03/2010, 22:40
[...] ó terra, terra, terra; ouve a palavra do Senhor. — Jeremias 22:29
#5
Posted 11/03/2010, 17:47
Que tabela estranha, você só tem um campo de horário!? Como você identifica o usuário em questão, se só tem o horário?
Pois é, nao foi eu quem desenvolveu esta logica

1 user(s) are reading this topic
0 membro(s), 1 visitante(s) e 0 membros anônimo(s)