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

日付範囲の機器の総数を計算する

    次のSQLから始めて、指定された範囲と交差するすべての日付範囲を収集しました。

    SELECT MAX(available) - IFNULL(SUM(amountInSch), 0)
    FROM Table1
    LEFT JOIN Table3 USING (eqid)
    LEFT JOIN Table2 USING (scheduleid)
    WHERE DATE(startDate) <= '2012-08-27' AND DATE(endDate) >= '2012-08-27'
      AND endTime > '08:30' AND startTime < '12:00'
      AND eqid = 1
    

    フィドル

    これは最初の部分にすぎません。次に、考えられる重複を解決する必要があります。これはSQLで行うのは実用的ではないため、PHPで行うことをお勧めします。

    残念ながら、私が選択する一般的なアルゴリズムはO(n ** 2)であり、次のようになります。

    • 時間を横軸としてタイムライン(日ごとに区切る)を作成します
    • すべての日付/時間範囲を繰り返し、その左端と右端の時間をマークして、考えられるすべての順列の時間セグメントを作成します。
    • セグメントを使用して、オーバーラップを垂直方向に合計し、1日あたりの最大値を取得します。

    お役に立てば幸いです。




    1. SQLite JSON_GROUP_ARRAY()

    2. MySQLSELECTクエリでのIFステートメントの使用

    3. IPアドレスに使用するMySQLデータ型はどれですか?

    4. MySQLの結果をJSONエンコード