Estou muito atrasado para a festa, mas isso não aparece em nenhuma das respostas existentes:
GROUP BY DATEADD(MINUTE, DATEDIFF(MINUTE, '2000', date_column) / 10 * 10, '2000')
- Os termos
10
e MINUTE
podem ser alterados para qualquer número e DATEPART
, respectivamente.
- É um
DATETIME
valor, o que significa:
- Funciona bem em longos intervalos de tempo. (Não há colisão entre os anos.)
- A inclusão na
SELECT
declaração fornecerá à sua saída uma coluna com uma saída bonita truncada no nível que você especificar.
'2000'
é uma "data âncora" em torno da qual o SQL executará a matemática da data. Jereonh descobriu abaixo que você encontra um estouro de número inteiro com a âncora anterior ( 0
) ao agrupar datas recentes por segundos ou milissegundos. †
SELECT DATEADD(MINUTE, DATEDIFF(MINUTE, '2000', aa.[date]) / 10 * 10, '2000')
AS [date_truncated],
COUNT(*) AS [records_in_interval],
AVG(aa.[value]) AS [average_value]
FROM [friib].[dbo].[archive_analog] AS aa
GROUP BY DATEADD(MINUTE, DATEDIFF(MINUTE, '2000', aa.[date]) / 10 * 10, '2000')
ORDER BY [date_truncated]
Se seus dados se estenderem por séculos, ‡ usando uma única data de ancoragem para o agrupamento de segundo ou milissegundo ainda encontrará o estouro. Se isso estiver acontecendo, você pode solicitar a cada linha que ancore a comparação de classificação na meia-noite da sua própria data:
Use em DATEADD(DAY, DATEDIFF(DAY, 0, aa.[date]), 0)
vez de '2000'
onde quer que apareça acima. Sua consulta será totalmente ilegível, mas funcionará.
Uma alternativa pode ser CONVERT(DATETIME, CONVERT(DATE, aa.[date]))
a substituição.
† 2 32 ≈ 4,29E + 9, portanto, se DATEPART
for SECOND
, você recebe 4,3 bilhões de segundos de cada lado, ou "ancora ± 136 anos". Da mesma forma, 2 32 milissegundos é de ≈ 49,7 dias.
‡ Se os seus dados ultrapassam séculos ou milênios e ainda são precisos até o segundo ou milissegundo ... parabéns! O que quer que você esteja fazendo, continue fazendo.
ROUND((DATEPART(MINUTE, DT.[Date]) / 5),0,1) * 5
, de modo que quando eu olhar para os dados que está correlacionada com a ranhura mais próxima vez