Ir para conteúdo

POWERED BY:

Arquivado

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

raelpsf

Média entre horários datetime

Recommended Posts

x = 10.5832

 

Isso é minutos??

 

Se sim.. tenho 2 dúvidas..

 

1) Ele verifica só os registros, entre o primeiro e o último né? Mas no caso de mais dias.. por ex.. um registro acabando as 18:00 e começando no outro dia as 09:00.. ele não vai ver um espação gigante?

 

2) Teria como no cálculo, subrair a 01 hora de almoço do funcionário? pois se não der... acho que influencia tb no resultado.. não?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Isso é minutos??

 

Sim

 

1) Ele verifica só os registros, entre o primeiro e o último né? Mas no caso de mais dias.. por ex.. um registro acabando as 18:00 e começando no outro dia as 09:00.. ele não vai ver um espação gigante?

 

Diferença entre as data/hora , qualquer que seja ela. Calculando em minutos

 

 

2) Teria como no cálculo, subrair a 01 hora de almoço do funcionário? pois se não der... acho que influencia tb no resultado.. não?

 

bastaria subtrair 60 minutos da diferença, mas isto remete a uma coisa , isto talvez deva ser agrupado por funcionário...

 

o que muda tudo pois a sequencia anterior não deve ser a do mesmo id_user ....

 

a jogada do id -1 não funciona ...

 

a query calculou a média de minutos entre os lançamento sem levar em conta o id_user

 

 

==============

 

 

vou pensar uma solução simples com o id_user , veja se vc imagina algo ....

Compartilhar este post


Link para o post
Compartilhar em outros sites

Puts, pior que ver com Id-user seria bacana msm.. pois eu iria colocar isso justamente no relatório dos usuários..

Compartilhar este post


Link para o post
Compartilhar em outros sites

Creio que seja isto ...

SELECT i1.id_user,avg(24 * 60 * (DATEDIFF(i2.data,i1.data))) x
FROM INTERACOES I1, INTERACOES I2
WHERE i1.id_user = i2.id_user
and i1.id <  i2.id
AND i1.data >= DATE_SUB(NOW(),INTERVAL 31 DAY)
AND I2.DATA = (SELECT MAX(I3.DATA)
               FROM INTERACOES I3
               WHERE i3.id_user = i2.id_user
               and   i3.data < i1.data)
AND I1.DATA IS NOT NULL
AND i2.DATA IS NOT NULL
group by i1.id_user

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tá rodando a uns 2 minutos e não sai do "carregando".. na primeira tentativa deu a msm coisa..

 

to executando direto no banco...

 

Sem_t_tulo.jpg

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não deve ser muito rápida mesmo.

 

A tabela tem índice ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara, tentei de novo 15 minutos e continua carregando e a planilha nem tem tantas linhas assim..

 

Eu estava pensando.. não tem como fazer algo do tipo...

 

SELECT i1.id_user,avg(24 * 60 * (DATEDIFF(i2.data,i1.data))) x
FROM INTERACOES I1, INTERACOES I2
WHERE i1.id_user = i2.id_user
and i1.id <  i2.id
AND i1.data >= DATE_SUB(NOW(),INTERVAL 31 DAY)
AND I2.DATA = (SELECT MAX(I3.DATA)
               FROM INTERACOES I3
               WHERE i3.id_user = 'NOME DO FUNCIONARIO')
AND I1.DATA IS NOT NULL
AND i2.DATA IS NOT NULL
group by i1.id_user

 

Pois fazendo assim, retornou

 

id_user = NOME DO FUNCIONARIO

x = 21879.5604

 

Tá certo isso ou fiz cagada?

Compartilhar este post


Link para o post
Compartilhar em outros sites
SELECT i1.id_user,avg(24 * 60 * (DATEDIFF(i2.data,i1.data))) x 
FROM INTERACOES I1, INTERACOES I2 
WHERE i1.id_user = <codogo user>
and i1.id_user = i2.id_user 
and i1.id <  i2.id 
AND i1.data >= DATE_SUB(NOW(),INTERVAL 31 DAY) 
AND I2.DATA = (SELECT MAX(I3.DATA)                
               FROM INTERACOES I3                
               WHERE i3.id_user = i2.id_user                
               and   i3.data < i1.data) 
AND I1.DATA IS NOT NULL 
AND i2.DATA IS NOT NULL 
group by i1.id_user

 

 




			
		

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.