Mysql
 sql >> база данни >  >> RDS >> Mysql

Увеличаване на производителността на MySQL Query - Математическа тежка заявка

Мисля, че това ще ви даде това, което искате, с подвижен период от време, който ви интересува... Тествах, като създадох моя собствена таблица с "фактури" с двете идентифицирани колони. Всъщност беше доста просто с използването на @ mySQL променливи, които могат да се използват вградени в заявката... Единственото нещо е, че сега има верен начин да разберете какво е "откриващо" салдо, така че зададох първоначалното начална стойност е нула, след което коригирайте от това.

Кикерът е заявката "PreAgg", която просто се обобщава по самата дата на влизане/излизане. След това, като подредите резултата по дати, променливата @ 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

Въпреки това, въпреки че съм дал период от 3 месеца (-2 месеца, +1 месец), не мисля, че наистина има смисъл, тъй като бъдещите публикации все още няма да са се случили... това, което може да е по-важно е да просто имайте

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

който ще получи последните 3 месеца от текущата дата/час.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Възстановете структурата на таблицата от frm и ibd файлове

  2. Как да получите достъп до елементи на масива

  3. Какъв е най-бързият начин за изхвърляне и зареждане на MySQL InnoDB база данни с помощта на mysqldump?

  4. Достъпът е отказан за потребител ''@'localhost' (използвайки парола:НЕ)

  5. Интегриране на MySQL с Python в Windows