none
Range de horário RRS feed

  • Pergunta

  •  Olá pessoal, não tenho muita familiaridade com SQL, mas estou tentando fazer a seguinte query. Quero extrair dados estatísticos de minha base. Nela armazeno pedidos que guardam um datatime. Preciso saber quando acontece a maioria das vendas no dia. Qual a melhor solucao para fazer esta query? Com between?

    Obrigado!!

    terça-feira, 4 de junho de 2013 01:07

Respostas

  • Olá,

    Então deverá ser mais ou menos isto:

    -- Criação de tabela temporária e inserção de registos de teste
    DECLARE @Vendas TABLE(idVenda INT IDENTITY(1, 1), DataHora DATETIME);
    INSERT INTO @Vendas VALUES ('2013-06-03T08:45:01'),('2013-06-03T09:36:01'),('2013-06-03T12:16:01'),('2013-06-04T09:10:01'),('2013-06-04T09:21:01'),('2013-06-04T09:31:01'),('2013-06-04T09:50:01'),('2013-06-04T10:12:01'),('2013-06-04T10:47:01'),('2013-06-04T13:05:01'),('2013-06-04T14:16:01'),('2013-06-04T16:16:01')
    
    -- Mostra os dados inseridos:
    SELECT * FROM @Vendas;
    
    -- Calcula o somatório e formata a apresentação
    SELECT RIGHT('0' + CAST(Hora AS VARCHAR(2)), 2) + ':00 - ' + RIGHT('0' + CAST(Hora AS VARCHAR(2)), 2) + ':59' AS Hora, Contador
    FROM
    (
    	SELECT DATEPART(HH, DataHora) AS Hora, COUNT(1) AS Contador
    		FROM @Vendas
    		GROUP BY DATEPART(HH, DataHora)
    ) T
    ORDER BY Contador DESC;

    Espero ter ajudado,

    Please use Mark as Answer if my post solved your problem and use Vote As Helpful if a post was useful.

    Pedro Martins
    Portugal
    https://www.linkedin.com/in/rechousa

    • Marcado como Resposta brunorcajo terça-feira, 4 de junho de 2013 01:56
    terça-feira, 4 de junho de 2013 01:52

Todas as Respostas

  • Olá,

    Quando dizes "quando acontece a maioria das vendas no dia"... Isto é muito vago. Podes querer saber hora e minuto, apenas hora ou um intervalo de horas (exemplo: das 14h00 às 16h00).

    E quando dizes a maioria das vendas pode ser em número (500 vendas) ou em valor (15000 USD).

    O que deves fazer é o SUM do número de vendas ou do seu valor e agrupar pela forma que melhor entenderes (hora, ou intervalo de horas - por minuto não deve fazer muito sentido).

    Espero ter ajudado,


    Please use Mark as Answer if my post solved your problem and use Vote As Helpful if a post was useful.

    Pedro Martins
    Portugal
    https://www.linkedin.com/in/rechousa

    terça-feira, 4 de junho de 2013 01:28
  • Olá Rechousa, obrigado

    O que quero saber é o total de vendas que tenho dentro de cada hora, por exemplo

    14:00 - 15:00 | 50 vendas
    15:00 - 16:00 | 37 vendas

    Obrigado

    Bruno

    terça-feira, 4 de junho de 2013 01:37
  • Olá,

    Então deverá ser mais ou menos isto:

    -- Criação de tabela temporária e inserção de registos de teste
    DECLARE @Vendas TABLE(idVenda INT IDENTITY(1, 1), DataHora DATETIME);
    INSERT INTO @Vendas VALUES ('2013-06-03T08:45:01'),('2013-06-03T09:36:01'),('2013-06-03T12:16:01'),('2013-06-04T09:10:01'),('2013-06-04T09:21:01'),('2013-06-04T09:31:01'),('2013-06-04T09:50:01'),('2013-06-04T10:12:01'),('2013-06-04T10:47:01'),('2013-06-04T13:05:01'),('2013-06-04T14:16:01'),('2013-06-04T16:16:01')
    
    -- Mostra os dados inseridos:
    SELECT * FROM @Vendas;
    
    -- Calcula o somatório e formata a apresentação
    SELECT RIGHT('0' + CAST(Hora AS VARCHAR(2)), 2) + ':00 - ' + RIGHT('0' + CAST(Hora AS VARCHAR(2)), 2) + ':59' AS Hora, Contador
    FROM
    (
    	SELECT DATEPART(HH, DataHora) AS Hora, COUNT(1) AS Contador
    		FROM @Vendas
    		GROUP BY DATEPART(HH, DataHora)
    ) T
    ORDER BY Contador DESC;

    Espero ter ajudado,

    Please use Mark as Answer if my post solved your problem and use Vote As Helpful if a post was useful.

    Pedro Martins
    Portugal
    https://www.linkedin.com/in/rechousa

    • Marcado como Resposta brunorcajo terça-feira, 4 de junho de 2013 01:56
    terça-feira, 4 de junho de 2013 01:52
  • Muito obrigado amigo Rechousa!
    terça-feira, 4 de junho de 2013 01:57