Trate la marca de tiempo de cada publicación como el inicio de dicha hora y cuente todas las demás publicaciones que caigan dentro de esa hora, incluida la publicación que la inició.Ordene las horas resultantes en orden descendente por la cantidad de publicaciones en cada una de ellas.
Una vez hecho esto, encontrará la "hora" más alta que tiene la mayor cantidad de publicaciones, pero este período de tiempo puede no ser exactamente de una hora, puede ser más corto (pero nunca más).
Para obtener un período "más bonito", puede calcular cuánto tiempo realmente es, dividir por dos y ajustar el inicio del período en esa cantidad y el final hacia adelante, esto "centrará" las publicaciones dentro del hora. Se garantiza que este ajuste no incluirá ninguna publicación nueva, por lo que el recuento sigue siendo válido. Si las publicaciones están lo suficientemente cerca como para incluirlas repentinamente en el período posterior a la expansión a una hora, un punto anterior tendría "la mayor cantidad de publicaciones" en lugar de la que seleccionó.
Si esta es una pregunta de SQL, puede reutilizar el SQL que Josh publicó here, simplemente reemplace la tabla de Minutos con otro enlace a su tabla de mensajes.
Otro método puede utilizar es el uso de una ventana deslizante.
Primero ordena todas las publicaciones de acuerdo con la marca de tiempo. Mantenga un registro de las publicaciones usando una lista, una lista vinculada podría ser utilizada para esto.
Ahora, para cada publicación, agréguela al final de la lista. Luego, para cada publicación desde el inicio de la lista, si esa publicación es más de una hora antes de la publicación que acaba de agregar, elimínela de la lista.
Después de hacer la operación en 2 pasos para una nueva publicación en la lista, verifique si el número de publicaciones en la lista es más que un máximo anterior, y si lo es, haga una copia de la lista o al Almacene la publicación que acaba de agregar.
Una vez que haya terminado, obtendrá la "copia de la lista" con la mayor cantidad de publicaciones en una hora o la publicación que sea el final de una ventana de 1 hora que contenga la mayor cantidad de publicaciones.
Pseudo-código:
initialize posts-window-list to empty list
for each post in sorted-posts-list:
add post to end of posts-window-list
for each other-post from start of posts-window-list:
if other-post is more than one hour older than post, remove it
otherwise, end this inner loop
if number of posts in list is more than previous maximum:
make copy of list, this is the new maximum
ACLARACIÓN: Quiero considerar CUALQUIER período de 60 minutos. Por lo tanto, los métodos que usan la parte "hora" de la marca de tiempo no funcionarán. – OverloadUT
Veo ahora, ¿qué base de datos está usando? – JoshBerke