ActiveDelphi - Índice do Fórum ActiveDelphi
.: O site do programador Delphi! :.
 
 FAQFAQ   PesquisarPesquisar   MembrosMembros   GruposGrupos   RegistrarRegistrar 
 PerfilPerfil   Entrar e ver Mensagens ParticularesEntrar e ver Mensagens Particulares   EntrarEntrar 

Dúvida SQL para gráfico

 
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Banco de Dados
Exibir mensagem anterior :: Exibir próxima mensagem  
Autor Mensagem
grsoft
Aprendiz
Aprendiz


Registrado: Segunda-Feira, 10 de Abril de 2006
Mensagens: 107

MensagemEnviada: Qui Out 24, 2019 3:12 pm    Assunto: Dúvida SQL para gráfico Responder com Citação

Boa tarde pessoal, estou com uma dúvida de como construir uma SQL (banco MySQL) destinada para um gráfico, é o seguinte:

eu tenho uma tabela q contém todos as entregas realizadas para vários bairros e gostaria de saber como fazer uma SQL q me mostre a quantidade de entregas por bairro hora a hora por isso eu fiz a SQL abaixo:

SELECT COUNT(COD) as QUANTMOV, NOME, HORA from (
SELECT COD, BAIRRO AS NOME, TIME_FORMAT(CAST(DATAHORA as Time), '%H:00') as HORA
FROM MOVIMENTO
WHERE (DATAHORA BETWEEN '2019-10-01 00:00:00' AND '2019-10-23 23:59:59')
) tmp
group by HORA,NOME
order by NOME,HORA

o problema é q nessa SQL ele só mostra as horas que existem dentro do banco de dados e eu queria todas a horas do dia, de 00:00 até 23:00 ou até nos horários existentes no banco de dados, mas que o mais importante é que para cada bairro mostre todos os horário e que caso não tenha nenhum movimento em determinado horário, que ele mostre 0.

Agradeço antecipadamente toda a ajuda.
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
imex
Moderador
Moderador


Registrado: Sexta-Feira, 7 de Janeiro de 2011
Mensagens: 11666

MensagemEnviada: Qui Out 24, 2019 4:36 pm    Assunto: Responder com Citação

Boa tarde,

Não tenho nenhuma experiência com o MySQL mas segue uma sugestão para testes:

Código:
SELECT
  CASE WHEN t.HORA = h.HORA THEN t.QUANTMOV ELSE 0 END AS QUANTMOV,
  t.NOME,
  h.HORA
FROM
(
  SELECT COUNT(COD) as QUANTMOV, NOME, HORA
  from
  (
    SELECT COD, BAIRRO AS NOME, TIME_FORMAT(CAST(DATAHORA as Time), '%H:00') as HORA
    FROM MOVIMENTO
    WHERE (DATAHORA BETWEEN '2019-10-01 00:00:00' AND '2019-10-23 23:59:59')
  ) tmp
  group by HORA,NOME
) t
CROSS JOIN
(
  SELECT '00:00' AS HORA
  UNION ALL
  SELECT '01:00'
  UNION ALL
  SELECT '02:00'
  UNION ALL 
  SELECT '03:00'
  UNION ALL 
  SELECT '04:00'
) h
order by
  NOME,
  HORA


Espero que ajude


Editado pela última vez por imex em Seg Set 20, 2021 10:01 am, num total de 1 vez
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
grsoft
Aprendiz
Aprendiz


Registrado: Segunda-Feira, 10 de Abril de 2006
Mensagens: 107

MensagemEnviada: Qui Out 24, 2019 5:29 pm    Assunto: Responder com Citação

imex escreveu:
Boa tarde,

Não tenho nenhuma experiência com o MySQL mas segue uma sugestão para testes:

Código:
SELECT
  CASE WHEN t.HORA = h.HORA THEN t.QUANTMOV ELSE 0 END AS QUANTMOV,
  t.NOME,
  h.HORA
FROM
(
  SELECT COUNT(COD) as QUANTMOV, NOME, HORA
  from
  (
    SELECT COD, BAIRRO AS NOME, TIME_FORMAT(CAST(DATAHORA as Time), '%H:00') as HORA
    FROM MOVIMENTO
    WHERE (DATAHORA BETWEEN '2019-10-01 00:00:00' AND '2019-10-23 23:59:59')
  ) tmp
  group by HORA,NOME
) t
CROSS JOIN
(
  SELECT '00:00' AS HORA
  UNION ALL
  SELECT '01:00'
  UNION ALL
  SELECT '02:00'
  UNION ALL 
  SELECT '03:00'
  UNION ALL 
  SELECT '04:00'
) h
order by
  NOME,
  HORA


Espero que ajude


muito obrigado meu amigo mas o resultado está meio estranho, vou tentar colocar aqui como está saindo:

Essa imagem é o resultado original



Essa é o resultado com a nova SQL

Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
imex
Moderador
Moderador


Registrado: Sexta-Feira, 7 de Janeiro de 2011
Mensagens: 11666

MensagemEnviada: Qui Out 24, 2019 6:02 pm    Assunto: Responder com Citação

Experimente essa versão com algumas alterações:

Código:
SELECT
  SUM(CASE WHEN t.HORA = h.HORA THEN t.QUANTMOV ELSE 0 END) AS QUANTMOV,
  t.NOME,
  h.HORA
FROM
(
  SELECT COUNT(COD) as QUANTMOV, NOME, HORA
  from
  (
    SELECT COD, BAIRRO AS NOME, TIME_FORMAT(CAST(DATAHORA as Time), '%H:00') as HORA
    FROM MOVIMENTO
    WHERE (DATAHORA BETWEEN '2019-10-01 00:00:00' AND '2019-10-23 23:59:59')
  ) tmp
  group by HORA,NOME
) t
CROSS JOIN
(
  SELECT '00:00' AS HORA
  UNION ALL
  SELECT '01:00'
  UNION ALL
  SELECT '02:00'
  UNION ALL
  SELECT '03:00'
  UNION ALL
  SELECT '04:00'
) h
GROUP BY
  t.NOME,
  h,HORA
order by
  NOME,
  HORA


Espero que ajude
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
grsoft
Aprendiz
Aprendiz


Registrado: Segunda-Feira, 10 de Abril de 2006
Mensagens: 107

MensagemEnviada: Qui Out 24, 2019 6:23 pm    Assunto: Responder com Citação

imex escreveu:
Experimente essa versão com algumas alterações:

Código:
SELECT
  SUM(CASE WHEN t.HORA = h.HORA THEN t.QUANTMOV ELSE 0 END) AS QUANTMOV,
  t.NOME,
  h.HORA
FROM
(
  SELECT COUNT(COD) as QUANTMOV, NOME, HORA
  from
  (
    SELECT COD, BAIRRO AS NOME, TIME_FORMAT(CAST(DATAHORA as Time), '%H:00') as HORA
    FROM MOVIMENTO
    WHERE (DATAHORA BETWEEN '2019-10-01 00:00:00' AND '2019-10-23 23:59:59')
  ) tmp
  group by HORA,NOME
) t
CROSS JOIN
(
  SELECT '00:00' AS HORA
  UNION ALL
  SELECT '01:00'
  UNION ALL
  SELECT '02:00'
  UNION ALL
  SELECT '03:00'
  UNION ALL
  SELECT '04:00'
) h
GROUP BY
  t.NOME,
  h,HORA
order by
  NOME,
  HORA


Espero que ajude


Agora aparentemente deu tudo certo, MUITO obrigado meu amigo, vc sempre me salvando...
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
Mostrar os tópicos anteriores:   
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Banco de Dados Todos os horários são GMT - 3 Horas
Página 1 de 1

 
Ir para:  
Enviar Mensagens Novas: Proibido.
Responder Tópicos Proibido
Editar Mensagens: Proibido.
Excluir Mensagens: Proibido.
Votar em Enquetes: Proibido.


Powered by phpBB © 2001, 2005 phpBB Group
Traduzido por: Suporte phpBB