Jump to content

Archived

This topic is now archived and is closed to further replies.

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?

Share this post


Link to post
Share on other 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 ....

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other 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

Share this post


Link to post
Share on other 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

Share this post


Link to post
Share on other sites

Não deve ser muito rápida mesmo.

 

A tabela tem índice ?

Share this post


Link to post
Share on other 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?

Share this post


Link to post
Share on other 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

 

 




			
		

Share this post


Link to post
Share on other sites

×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.