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

1か月以内のDateRange内のMySQL日数(予約テーブル)

    あなたは正しい方向に進んでいます。データが必要な月のテーブルにクエリを結合する必要があります。このテーブルは、永続的であるか、(以下の例に示すように)UNIONで動的に作成されます。 サブクエリ:

    SELECT   YEAR(month.d),
             MONTHNAME(month.d),
             SUM(1 + DATEDIFF( -- add 1 because start&finish on same day is still 1 day
               LEAST(Checkout, LAST_DAY(month.d)), GREATEST(Checkin, month.d)
             )) AS days
    FROM     bookingdata
      RIGHT JOIN (
                       SELECT 20110101 AS d
             UNION ALL SELECT 20110201 UNION ALL SELECT 20110301
             UNION ALL SELECT 20110401 UNION ALL SELECT 20110501
             UNION ALL SELECT 20110601 UNION ALL SELECT 20110701
             UNION ALL SELECT 20110801 UNION ALL SELECT 20110901
             UNION ALL SELECT 20111001 UNION ALL SELECT 20111101
             UNION ALL SELECT 20111201
      ) AS month ON
                 Checkin <= LAST_DAY(month.d)
             AND month.d <= Checkout
    GROUP BY month.d
    

    sqlfiddle でご覧ください 。




    1. with句を持つ2つのクエリを自然に結合するにはどうすればよいですか?

    2. Postgres:単一の行を複数の行に変換します(ピボット解除)

    3. Oracle 11gレプリケーション-リモートデータベース(データベースリンク)でのコミット時にリフレッシュを使用

    4. MySQLdbが実行する実際のクエリを出力しますか?