Denna funktion skulle bäst tjänas av en funktion som heter materialiserad vy , som MySQL tyvärr saknar. Du kan överväga att migrera till ett annat databassystem, som PostgreSQL.
Det finns sätt att emulera materialiserade vyer i MySQL med hjälp av lagrade procedurer, utlösare och händelser. Du skapar en lagrad procedur som uppdaterar den samlade informationen. Om den aggregerade informationen måste uppdateras på varje infogning kan du definiera en trigger för att anropa proceduren. Om data måste uppdateras med några timmars mellanrum kan du definiera en MySQL-schemaläggarhändelse eller ett cron-jobb för att göra det.
Det finns ett kombinerat tillvägagångssätt, liknande ditt alternativ 3, som inte beror på datumen för indata; föreställ dig vad som skulle hända om ny data kommer ett ögonblick för sent och inte kommer in i aggregeringen. (Du kanske inte har det här problemet, jag vet inte.) Du kan definiera en utlösare som infogar ny data i en "backlog" och låta proceduren uppdatera den aggregerade tabellen endast från backloggen.
Alla dessa metoder beskrivs i detalj i den här artikeln:http://www.fromdual.com/ mysql-materialized-views