sql >> Databasteknik >  >> RDS >> Mysql

SQL:Hämtar den totala summan som underval mycket långsam

Istället för att gruppera på alla dessa fält, en enklare (och snabbare) lösning (från här ) kan vara:

GROUP BY UNIX_TIMESTAMP(timestamp_local)/3600

Jag kan inte föreställa mig att din fråga ger de resultat du vill ha (om jag förstår dina krav rätt). Jag förstår dina krav som, när det inte finns några rader för en given timme, vill du beräkna summan av alla rader med timme

Det finns inget enkelt och effektivt sätt att göra detta i MySQL som jag känner till, jag skulle föreslå att du skapar en tillfällig tabell med alla möjliga grupperingsvärden inom det intervall som du tittar på (förmodligen med en loop). Du kan förmodligen ställa in den här tabellen i förväg under några år, och eventuellt lägga till rader efter behov. Då kan du bara gå och gå med i det här bordet och ditt bord.

Om du använde MSSQL kunde du ha använt en rekursiv CTE, även om detta förmodligen skulle ha gått väldigt långsamt. Titta på denna eller googla "mysql cte" för MySQL-alternativ. Sättet att göra detta med rekursion är att (vänster) gå med på samma bord upprepade gånger under HOUR = HOUR+1 tills du får ett icke-NULL-värde, sluta sedan. För var och en av dessa kommer du att beräkna summan baklänges.




  1. Formatera månaden i romerska siffror i PostgreSQL

  2. Har inte databaslås! i android

  3. Postgres JSONb till XML med tag_name och tag_value

  4. Ta bort delvis/helt överlappande händelser med start- och sluttidsstämplar över flera värden