Eu tenho uma coluna de data e hora e posso facilmente executar consultas com um grupo na minha coluna de data e hora. No entanto, gostaria de executar consultas de grupo para
- intervalos de 1 minuto
- intervalos de 2 minutos
- intervalos de 5 minutos
- intervalos de 1 hora
- etc.
Como eu faço isso?
Primeiro, uma tabela e alguns dados de amostra para brincar:
(Eu faria isso no sqlfiddle, mas não tenho certeza se ele suporta
GO <int>
muitas linhas e engasga comINSERT
> 8.000 caracteres.)Agora um procedimento armazenado:
E alguns exemplos de uso:
Para resumir, mostrarei os resultados da última chamada, mas você pode brincar com as outras.
Algumas notas:
dates
para produzir todos os intervalos do dia, em vez de todos os intervalos entre o tempo mínimo e máximo encontradosdbo.SomeTable
naquele dia. A variação a seguir cuida disso, apresentando os dados de um único dia a partir da meia-noite e incrementando por @MinutInterval:...
Exemplos de chamadas:
Resultados resumidos da última chamada:
(Novamente, se você não quiser incluir os intervalos sem contagens, altere a junção externa esquerda para uma junção interna. Você também pode encontrar alguns resultados estranhos se escolher um intervalo que não se encaixe perfeitamente dentro de 1440. I' Vou deixar esse caso como um exercício para o leitor.)
Resultado:
Como
DATEPART
retorna números inteiros...Os números mostrados são o início do período de cinco minutos. Portanto, a linha rotulada como "30" abrange os eventos que ocorrem em X:30, X:31, X:32, X:33 e X:34.