Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Sintaxe para agrupar registros por horário

Olá pessoal!

Tenho uma tabela no MySQL que armazena eventos por horário com a seguinte estrutura:

id / qtd / time

Gostaria de criar uma consulta SQL que retornasse os eventos em grupos por faixa de horário . Por exemplo:

Das 01:00 às 06:00 - 500 itens / Das 07:00 às 12:00 - 800 itens

Pesquisei bastante a esse respeito e acredito que estou bem próximo com o seguinte SQL:

SELECT grupos, SUM(qtd) as quantidade
FROM (
     SELECT( CASE
         WHEN DATE_FORMAT(time, '%H:%i:%s') > '00:00' 
         && DATE_FORMAT(time, '%H:%i:%s') < '06:00' THEN '00h às 06h'
         WHEN DATE_FORMAT(time, '%H:%i:%s') > '06:00' 
         && DATE_FORMAT(time, '%H:%i:%s') < '12:00' THEN '06h às 12h'
         ELSE 0 END)
     as grupos
     FROM tb_events
     ) as acessos
GROUP BY grupos
ORDER BY quantidade;

Porém, não está funcionando e retorna o erro:

Coluna 'num_veh' desconhecida em 'field list'

Alguém sabe como corrigir este problema? Ou então sabe me dizer como eu poderia fazer diferente para encontrar um solução?

Desde já agradeço, Júnior

2 respostas

Time é uma palavra reservada para tipo tempo. Você não pode usar ela nesse contexto, tentra trocar para a palavra tempo. Depois mudar faça os testes e vê se isso resolve o problema.

solução!

Uma solução para este problema poderia ser esta:

SELECT SUM(total) as quantidade, (CASE when horario between 0 and 5 then '00h às 06h' when horario between 6 and 11 then '06h às 12h' when horario between 12 and 18 then '12 às 18h' else '18h às 24h' END) as grupos from (
SELECT  CAST(DATE_FORMAT(time, '%H') AS UNSIGNED) as horario, sum(qtd) as total
FROM tb_events
group by DATE_FORMAT(time, '%H')
    ) as tabela
    group by grupos

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software