raelpsf 0 Report post Posted April 29, 2013 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
Motta 645 Report post Posted April 29, 2013 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
raelpsf 0 Report post Posted April 30, 2013 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
Motta 645 Report post Posted April 30, 2013 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
raelpsf 0 Report post Posted April 30, 2013 Tá rodando a uns 2 minutos e não sai do "carregando".. na primeira tentativa deu a msm coisa.. to executando direto no banco... Share this post Link to post Share on other sites
Motta 645 Report post Posted April 30, 2013 Não deve ser muito rápida mesmo. A tabela tem índice ? Share this post Link to post Share on other sites
raelpsf 0 Report post Posted April 30, 2013 Não tem não.. como faço para criar um? Share this post Link to post Share on other sites
Motta 645 Report post Posted April 30, 2013 http://dev.mysql.com/doc/refman/5.0/en/create-index.html Atente ao Storage Engine Share this post Link to post Share on other sites
raelpsf 0 Report post Posted April 30, 2013 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
Motta 645 Report post Posted April 30, 2013 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