Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Zwiększanie wydajności zapytań MySQL — ciężkie zapytania matematyczne

Myślę, że dzięki temu uzyskasz to, czego chcesz, niezależnie od tego, jaki zakres dat Cię interesuje... Przetestowałem, tworząc własną tabelę „faktura” z dwiema zidentyfikowanymi kolumnami. W rzeczywistości było to dość proste z wykorzystaniem zmiennych @mySQL, które mogą być używane w zapytaniu ... Jedyną rzeczą jest to, że istnieje teraz prawdziwy sposób, aby dowiedzieć się, czym jest saldo "otwierające", więc ustawiłem początkowe wartość początkowa zero, a następnie dostosuj ją.

Kicker to zapytanie „PreAgg”, które ma agregować według samej daty wejścia/wyjścia. Następnie, porządkując ten wynik w kolejności dat, uruchamia się zmienna @ 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

Jednak pomimo tego, że dałem 3 miesiące (-2 miesiące, +1 miesiąc), nie sądzę, aby to miało sens, ponieważ przyszłe posty jeszcze się nie wydarzyły... co może być ważniejsze, to po prostu mieć

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

który otrzyma ostatnie 3 miesiące od bieżącej daty/czasu.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MYSQL_ROOT_PASSWORD jest ustawione, ale odmowa dostępu dla użytkownika „root”@„localhost” (przy użyciu hasła:TAK) w kontenerze dockera

  2. Czy JavaScript może łączyć się z MySQL?

  3. czas trwania mysql i czas pobierania

  4. MySql - oblicz różnicę czasu dla wielu wierszy

  5. Prawdziwy łańcuch ucieczki i PDO