sql >> Database >  >> RDS >> Mysql

SQL:ophalen van totale som als subselectie erg traag

In plaats van te groeperen op al die velden, is een eenvoudigere (en snellere) oplossing (van hier ) kan zijn:

GROUP BY UNIX_TIMESTAMP(timestamp_local)/3600

Ik kan me niet voorstellen dat uw zoekopdracht de gewenste resultaten oplevert (als ik uw vereisten goed begrijp). Ik begrijp uw vereisten, want als er geen rijen zijn voor een bepaald uur, wilt u de som van alle rijen met uur

Er is geen gemakkelijke, efficiënte manier om dit te doen in MySQL die ik ken, ik zou willen voorstellen om een ​​tijdelijke tabel te maken met alle mogelijke groeperingswaarden in het bereik waar je naar kijkt (waarschijnlijk met een lus). U kunt deze tabel waarschijnlijk een paar jaar van tevoren instellen en eventueel rijen toevoegen. Dan kun je gewoon links aanschuiven aan deze tafel en aan jouw tafel.

Als u MSSQL had gebruikt, had u een recursieve CTE kunnen gebruiken, hoewel dit waarschijnlijk erg traag zou zijn geweest. Bekijk dit of google "mysql cte" voor MySQL-alternatieven. De manier om dit met recursie te doen, is door (links) herhaaldelijk aan dezelfde tafel deel te nemen gedurende HOUR = HOUR+1 totdat u een niet-NULL-waarde krijgt, stop dan. Voor elk van deze bereken je de som achteruit.




  1. Symfony2.3 onbewerkte sql-query met IN-clausule

  2. Controleren op wijzigingen in een SQL Server-tabel?

  3. JSON_ARRAY() Functie in Oracle

  4. Time-out op adviserende vergrendelingen in postgresql