Jump to content

POWERED BY:

Archived

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

mariolt

[Resolvido] Select Mysql

Recommended Posts

Pessoal,

Estou fazendo um select cujo o objetivo é saber a hora que teve o maior movimento de usuarios. A tabela possui o seguintes campos:

 

DATA | HORA | ACESSO

 

o resultado tem que sair assim:

 

25/12/2011 11:00 190

26/12/2011 11:00 150

27/12/2011 10:00 167

..

31/12/2011 09:00 180

 

e assim vai..

 

 

alguma sugestão de como chegou nesses dados? tentei usar a seguinte instrução:

select CDATE, CTIME, MAX(OMGWSERL) from tb_mgwi where OBJECT = '20.27.38.1:2944' group by CDATE

 

CDATE,CTIME,MAX(OMGWSERL)

2011-11-22,00:00:00,19

2011-11-23,01:00:00,21

2011-11-24,01:00:00,22

2011-11-25,00:00:00,19

2011-11-26,00:00:00,8

2011-11-27,00:00:00,4

2011-11-28,00:00:00,19

2011-11-29,00:00:00,21

 

Até agrupo as datas, porem o horario ficou errado. O horario no relatorio não bate com o horario correto da leitura da quantidade de acesso.

Share this post


Link to post
Share on other sites

select * from tabela order by acesso desc

Errado, ele não quer o número de acessos ordenado.

 

SELECT DATE(CDATA), HOUR(CDATA) , COUNT(*) FROM TABELA GROUP BY DATE(CDATA), HOUR(CDATA)

 

Errado também, leia:

 

Estou fazendo um select cujo o objetivo é saber a hora que teve o maior movimento de usuarios.

 

Eis a solução

mysql> select * from acessos;
+---------------------+---------+
| horario             | acessos |
+---------------------+---------+
| 2011-11-22 00:00:00 |      19 |
| 2011-11-23 01:00:00 |      21 |
| 2011-11-24 01:00:00 |      22 |
| 2011-11-25 00:00:00 |      19 |
| 2011-11-26 00:00:00 |       8 |
| 2011-11-27 00:00:00 |       4 |
| 2011-11-28 00:00:00 |      19 |
| 2011-11-29 00:00:00 |      21 |
+---------------------+---------+
8 rows in set (0.00 sec)

mysql> select sum(acessos), horario from acessos group by hour(horario);
+--------------+---------------------+
| sum(acessos) | horario             |
+--------------+---------------------+
|           90 | 2011-11-22 00:00:00 |
|           43 | 2011-11-23 01:00:00 |
+--------------+---------------------+
2 rows in set (0.00 sec)

Share this post


Link to post
Share on other sites
Estou fazendo um select cujo o objetivo é saber a hora que teve o maior movimento de usuarios.

 

exatamente, ordenando de forma decrescente o numero de acesso ele vai obter a hora....

Share this post


Link to post
Share on other sites

Seria ...

 

SELECT HOUR(CDATA) , COUNT(*) QTD
FROM TABELA 
GROUP BY HOUR(CDATA)
ORDER BY 2 DESC

 

OU

 

SELECT HORA,AVG(QTD) MEDIA
FROM
(SELECT DATE(CDATA) DATA, HOUR(CDATA) HORA, COUNT(*) QTD
FROM TABELA 
GROUP BY DATE(CDATA), HOUR(CDATA))
GROUP BY HORA
ORDER BY 2

Share this post


Link to post
Share on other sites

exatamente, ordenando de forma decrescente o numero de acesso ele vai obter a hora....

 

Não exatamente, preciso sim da hora que foi registrado o maior movimento, mas tem que ser dentro do dia em questão. Por isso que eu estou procurando algum algoritimo no sql para fazer essa consulta.

 

Aqui pode ser vista uma planilha com um exemplo do relatorio que preciso.

 

Agradeço o empenho de todos! abraço

Share this post


Link to post
Share on other sites
Não exatamente, preciso sim da hora que foi registrado o maior movimento, mas tem que ser dentro do dia em questão. Por isso que eu estou procurando algum algoritimo no sql para fazer essa consulta.

 

SELECT HOUR(CDATA) , COUNT(*) QTD
FROM TABELA 
WHERE CDATA = '....'
GROUP BY HOUR(CDATA)
ORDER BY 2 DESC

Share this post


Link to post
Share on other sites

@mariolt, você chegou a testar o código SQL que postei .. ?

 

Sim, testei sim porém a hora fica sempre 0:00.

 

SELECT HOUR(CDATA) , COUNT(*) QTD
FROM TABELA 
WHERE CDATA = '....'
GROUP BY HOUR(CDATA)
ORDER BY 2 DESC

 

beleza Motta, se eu quisesse pegar a média traquilo pra fazer. Quero pegar o valor MAXIMO por dia, por hora dentro de um período. As análises que terei que fazer é de um período sempre acima de um dia. Tá osso, dois dias que estou tentando achar esse algoritimo. Agradeço a colaboração de todos.

Share this post


Link to post
Share on other sites

Sim, testei sim porém a hora fica sempre 0:00.

 

O campo de data CDATA foi gravado com a hora ?

Se não foi não há obter a informação.

 

Talvez o campo a ser usado seja o CTIME.

Share this post


Link to post
Share on other sites

Sim, testei sim porém a hora fica sempre 0:00.

 

O campo de data CDATA foi gravado com a hora ?

Se não foi não há obter a informação.

 

Talvez o campo a ser usado seja o CTIME.

 

Achei esse tutorial aqui no iMaster e resolvi meu problema com uma subquery. Aquem possa se interessar, segue meu select:

 

SELECT m1.data, m1.hora, m1.valor
FROM tb_mgwi AS m1
JOIN (
      SELECT , data, MAX(valor) AS valor
      FROM tabela WHERE data BETWEEN '2011-10-25' AND '2011-10-31' GROUP BY data ORDER BY data) AS derivada
      ON m1.cdate = derivada.cdate
      AND m1.omgwseiz = derivada.valor

 

agradeço a todos pela colaboração! abraços

Share this post


Link to post
Share on other sites

Confesso que não entendi, mas se funcionou deixa quieto.

Share this post


Link to post
Share on other sites

Não exatamente, preciso sim da hora que foi registrado o maior movimento, mas tem que ser dentro do dia em questão. Por isso que eu estou procurando algum algoritimo no sql para fazer essa consulta.

 

Aqui pode ser vista uma planilha com um exemplo do relatorio que preciso.

 

Agradeço o empenho de todos! abraço

 

releia o q eu escrevi...

Share this post


Link to post
Share on other sites

×

Important Information

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