tchaves 0 Denunciar post Postado Julho 24, 2015 Olá pessoa, boa tarde! Gostaria da ajuda dos senhores para me ajudar a arrumar uma Query. Tenho um sistema de chamado e estou gerando alguns gráficos fazendo algumas consultas no banco. Neste momento estou atrás de uma Query que me retorne a data (com horário) que os chamados estão sendo fechados. Então com posse desta informação o próximo passo seria juntar com Group By a quantidade de chamados fechados por hora e depois fazer um relatório. Então eu fiz: mysql> SELECT DATE_FORMAT(max(ticket_history.change_time), '%H:00:00') AS Closed, COUNT(ticket.tn) Quantity FROM ticket_history LEFT JOIN ticket ON (ticket.id = ticket_history.ticket_id) WHERE ticket_history.history_type_id = 27 AND ticket_history.state_id IN (2,3) GROUP BY ticket.tn LIMIT 10;+----------+----------+| Closed | Quantity |+----------+----------+| 09:00:00 | 1 || 10:00:00 | 1 || 21:00:00 | 1 || 19:00:00 | 1 || 11:00:00 | 1 || 11:00:00 | 2 || 15:00:00 | 1 || 15:00:00 | 1 || 15:00:00 | 1 || 11:00:00 | 1 |+----------+----------+ Reparem que o horário das 11:00 aparece 3 vezes e eu queria juntar para que ficasse: 11:00:00 | 3. Então fiz a Query abaixo e me retornou o seguinte erro: mysql> SELECT DATE_FORMAT(max(ticket_history.change_time), '%H:00:00') AS Closed, COUNT(ticket.tn) Quantity FROM ticket_history LEFT JOIN ticket ON (ticket.id = ticket_history.ticket_id) WHERE ticket_history.history_type_id = 27 AND ticket_history.state_id IN (2,3) GROUP BY Closed LIMIT 10;ERROR 1056 (42000): Can't group on 'Closed' Alguém poderia me ajudar com esta consulta? Compartilhar este post Link para o post Compartilhar em outros sites
lokaodomau 61 Denunciar post Postado Julho 24, 2015 Remova o MAX de dentro do DATE_FORMAT, você está utilizando uma função agregada do GROUP BY no próprio campo do GROUP BY, isso não deve funcionar corretamente, se quiser, pode utilizar uma sub-query ara filtrar a última data informada. SELECT * FROM tabela WHERE horario = ( SELECT MAX(horario) FROM tabela ) Lembrando que para este caso específico, a sub-query não pode ter mais de 1 linha e 1 coluna. Compartilhar este post Link para o post Compartilhar em outros sites
tchaves 0 Denunciar post Postado Julho 24, 2015 Opa lokaodomau você novamente salvando a pátria :D Então, cara, eu fiz o que você disse e tive o resultado esperado. Queria saber se está correto agora desta maneira. Forte abraço meu chapa! mysql> SELECT DATE_FORMAT(ticket_history.change_time, '%H:00:00') AS Closed, COUNT(ticket.tn) Quantity FROM ticket_history LEFT JOIN ticket ON (ticket.id = ticket_history.ticket_id) WHERE ticket.create_time between '2015-06-01' and '2015-06-30' AND ticket_history.history_type_id = 27 AND ticket_history.state_id IN (2,3) GROUP BY Closed;+----------+----------+| Closed | Quantity |+----------+----------+| 01:00:00 | 1 || 08:00:00 | 30 || 09:00:00 | 56 || 10:00:00 | 52 || 11:00:00 | 57 || 12:00:00 | 14 || 13:00:00 | 9 || 14:00:00 | 30 || 15:00:00 | 57 || 16:00:00 | 57 || 17:00:00 | 60 || 18:00:00 | 16 |+----------+----------+12 rows in set (0.01 sec) Compartilhar este post Link para o post Compartilhar em outros sites
lokaodomau 61 Denunciar post Postado Julho 27, 2015 Acredito que esteja sim, mas caso o campo `create_time` seja DATETIME, dentro do WHERE, o banco entende somente a data como sendo 00:00:00, o ideal seria utilizar a função DATE() para filtrar somente pela data, veja um exemplo: SELECT NOW() AS agora, DATE(NOW()) AS hoje, CURDATE() AS hojeTambem Compartilhar este post Link para o post Compartilhar em outros sites