sql >> Database >  >> RDS >> Mysql

Prestaties van MySQL-query's verbeteren - zware wiskundequery

Ik denk dat dit je zal geven wat je wilt, maar met een voortschrijdend datumbereik waar je je zorgen over maakt... Ik heb het getest door mijn eigen "factuur"-tabel te maken met de twee geïdentificeerde kolommen. Het was eigenlijk vrij eenvoudig met het gebruik van @ mySQL-variabelen die inline in de query kunnen worden gebruikt ... Het enige is dat er nu een echte manier is om te weten wat een "openings" -saldo is, dus ik heb de initiële opstartwaarde van nul en pas daar vanaf.

De kicker is de "PreAgg"-query om gewoon te aggregeren op de datum zelf van in / uit. Door dat resultaat vervolgens in datumvolgorde te bestellen, wordt de variabele @ sql geactiveerd.

select
      PreAgg.PostDate,
      @PrevBal as BegBal,
      PreAgg.OutFlows,
      PreAgg.InFlows,
      @PrevBal := @PrevBal + PreAgg.OutFlows + PreAgg.InFlows as EndBal
   from 
      ( select
              i.postdate,
              sum( if( i.amount < 0, i.amount, 0 ) ) as OutFlows,
              sum( if( i.amount > 0, i.amount, 0 ) ) as InFlows
           from 
              invoice i
           where
              i.postdate between date_sub( now(), interval 2 month )
                             and date_add( now(), interval 1 month )
           group by
              i.postdate
           order by 
              i.postdate ) as PreAgg,
      ( select @PrevBal := 0.00 ) as SqlVars

Hoewel ik een venster van 3 maanden heb gegeven (-2 maanden, +1 maand), denk ik niet dat dat echt logisch is, aangezien de toekomstige berichten nog niet hebben plaatsgevonden... wat misschien nog belangrijker is, is om heb gewoon

       where
          i.postdate > date_sub( now(), interval 3 month )

die de laatste 3 maanden krijgen vanaf de huidige datum/tijd.



  1. Een web-app maken vanaf nul met Python Flask en MySQL:deel 3

  2. Vergelijking van de datum- en tijdgegevenstypen in SQL Server

  3. Hoe te repareren "Er kan slechts één uitdrukking worden opgegeven in de selectielijst ..." in SQL Server

  4. Uren, minuten, seconden toevoegen aan SQL-datum