sql >> データベース >  >> RDS >> Mysql

MySQLクエリのパフォーマンスの向上-数学の重いクエリ

    これであなたが望むものが得られると思いますが、あなたが懸念しているローリング日付範囲...私は2つの列が識別された独自の「請求書」テーブルを作成してテストしました。クエリでインラインで使用できる@mySQL変数を利用することで、実際には非常に簡単でした...唯一のことは、「開始」バランスが何であるかを知る本当の方法があるので、最初のゼロの起動値を次に調整します。

    キッカーは、in/outの日付自体で集計する「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. R DBI ODBCエラー:nanodbc / nanodbc.cpp:3110:07009:[Microsoft][SQLServer用のODBCドライバー13]無効な記述子インデックス

    2. ユーザーがVBAの入力ボックスで[キャンセル]をクリックしたかどうかを確認する方法

    3. MySQLとMariaDB

    4. 非推奨のmysql_*関数を使用して古いmysql-phpコードを正常に書き換える方法は?