sql >> Databáze >  >> RDS >> Mysql

Zvýšení výkonu dotazů MySQL – matematický náročný dotaz

Myslím, že tím získáte to, co chcete, bez ohledu na pohyblivé časové období, které vás zajímá... Testoval jsem vytvořením vlastní tabulky „faktury“ se dvěma identifikovanými sloupci. Ve skutečnosti to bylo docela jednoduché s využitím proměnných @ mySQL, které lze v dotazu použít inline... Jediná věc je, že nyní existuje skutečný způsob, jak zjistit, co je "počáteční" zůstatek, takže jsem nastavil počáteční spouštěcí hodnotu nula a poté ji upravte.

Nakopávačem je dotaz „PreAgg“, který se pouze agreguje podle samotného data vstupu/odchodu. Poté, když tento výsledek seřadíte v pořadí podle data, spustí se proměnná @ sql.

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

Nicméně, i když jsem dal 3 měsíční okno (-2 měsíce, +1 měsíc), nemyslím si, že to opravdu dává smysl, protože k budoucím příspěvkům ještě nedojde... co může být důležitější, je stačí mít

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

který získá poslední 3 měsíce od aktuálního data/času.



  1. SQL Alter Table

  2. Importujte soubor CSV do tabulky SQLite

  3. Jak dynamicky předávat hodnoty operátoru IN?

  4. zobrazit data z databáze do rozevíracího seznamu CodeIgniter