Esto devolverá un recuento de los resultados para cada minuto (donde se tiene registros) en la última hora
SELECT DATEPART(n, time_stamp) AS minute, COUNT(*) as results
FROM table_name
WHERE time_stamp > DATEADD(hh, -1, GETDATE())
GROUP BY DATEPART(n, time_stamp)
Esto puede devolver menos de 60 resultados, dependiendo de los datos. Si tiene que tener 60 resultados, la consulta es ligeramente diferente. Este utiliza una expresión de tabla común para generar una lista de 60 números y una sub-consulta correlacionada para obtener los resultados de cada minuto:
WITH numbers (num) AS (
SELECT 1 UNION ALL
SELECT 1 + num FROM numbers WHERE num < 60)
SELECT num AS minute,
(SELECT COUNT(*) AS results
FROM table_name
WHERE DATEPART(n, time_stamp) = num
AND time_stamp > DATEADD(hh, -1, GETDATE())
FROM numbers
Para ver los resultados, reemplace DATEADD (hh, -1, GETDATE()) con DATEADD (mi, -15, GETDATE()) y obtendrás los resultados de los últimos 15 minutos y 0 para otros minutos.
parece correcto, gracias. –
Me alegra ayudar. ¿Necesita garantizar que la consulta devuelva 60 registros cada vez? –
no, no hay necesidad, gracias –