Я супер опоздал на вечеринку, но это не отражено ни в одном из существующих ответов:
GROUP BY DATEADD(MINUTE, DATEDIFF(MINUTE, 0, date_column) / 10 * 10, 0)
- Термины
10
и MINUTE
можно изменить налюбое число и DATEPART
соответственно. - Это значение
DATETIME
, , что означает: - Работает нормально в течение длительного времениинтервалы.(Между годами нет коллизий.)
- Включение его в оператор
SELECT
даст вашему выходу столбец с довольно обрезанным выводом на указанном вами уровне.
SELECT DATEADD(MINUTE, DATEDIFF(MINUTE, 0, aa.[date]) / 10 * 10, 0) 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, 0, aa.[date]) / 10 * 10, 0)
ORDER BY [date_truncated]