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

SQL:副選択として合計を取得するのが非常に遅い

    これらすべてのフィールドをグループ化するのではなく、より単純な(そしてより高速な)ソリューション(ここ )は次のようになります:

    GROUP BY UNIX_TIMESTAMP(timestamp_local)/3600
    

    あなたのクエリがあなたが望む結果を返すとは想像できません(私があなたの要件を正しく理解している場合)。特定の時間に行がない場合、時間<その時間のすべての行の合計を計算する必要があるため、要件を理解しています。 MySQLは(サブクエリ部分に対して)空のグループを選択しません。

    私が知っているMySQLでこれを行う簡単で効率的な方法はありません。私は、あなたが見ている範囲内のすべての可能なグループ化値(おそらくループを使用)で一時テーブルを作成することをお勧めします。おそらく、このテーブルを数年間事前に設定し、必要に応じて行を追加することができます。次に、このテーブルとテーブルをそのまま結合します。

    MSSQLを使用している場合は、再帰CTEを使用できますが、これはおそらく非常に低速でした。 これを見てください または、MySQLの代替の場合はgoogle"mysqlcte"。再帰を使用してこれを行う方法は、(左)同じテーブルでHOUR = HOUR+1を繰り返し結合することです。 NULL以外の値を取得するまで、停止します。これらのそれぞれについて、合計を逆算します。




    1. データベース内の複数のテーブルの監査履歴

    2. KubernetesでGaleraクラスターを実行する

    3. コマンドラインからsqlplusを介して単一のコマンドを発行するにはどうすればよいですか?

    4. postgresqlですべての結果を表示しますか?