Cette fonctionnalité serait mieux servie par une fonctionnalité appelée vue matérialisée , ce qui manque malheureusement à MySQL. Vous pouvez envisager de migrer vers un système de base de données différent, tel que PostgreSQL.
Il existe des moyens d'émuler des vues matérialisées dans MySQL à l'aide de procédures stockées, de déclencheurs et d'événements. Vous créez une procédure stockée qui met à jour les données agrégées. Si les données agrégées doivent être mises à jour à chaque insertion, vous pouvez définir un déclencheur pour appeler la procédure. Si les données doivent être mises à jour toutes les quelques heures, vous pouvez définir un Événement du planificateur MySQL ou une tâche cron pour le faire.
Il existe une approche combinée, similaire à votre option 3, qui ne dépend pas des dates des données d'entrée ; imaginez ce qui se passerait si de nouvelles données arrivaient un moment trop tard et n'entraient pas dans l'agrégation. (Vous n'avez peut-être pas ce problème, je ne sais pas.) Vous pouvez définir un déclencheur qui insère de nouvelles données dans un "backlog" et faire en sorte que la procédure mette à jour la table agrégée à partir du backlog uniquement.
Toutes ces méthodes sont décrites en détail dans cet article :http://www.fromdual.com/ vues matérialisées mysql