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

指定された日付間の価格を計算する

    このソリューションを使用してください:

    SELECT     SUM(
                   CASE WHEN a.Start_date = b.min_sd AND a.Start_date <> b.max_sd THEN
                            (DATEDIFF(a.End_date, '2012-08-30')+1) * a.Price
                        WHEN a.Start_date = b.max_sd AND a.Start_date <> b.min_sd THEN
                            DATEDIFF('2012-09-04', a.Start_date) * a.Price
                        WHEN (a.Start_date,a.Start_date) IN ((b.min_sd,b.max_sd)) THEN
                            (DATEDIFF('2012-09-04', '2012-08-30')+1) * a.Price
                        WHEN a.Start_date NOT IN (b.min_sd, b.max_sd)             THEN
                            (DATEDIFF(a.End_date, a.Start_date)+1) * a.Price
                   END 
               ) AS totalprice
    FROM       rooms a
    CROSS JOIN (
               SELECT MIN(Start_date) AS min_sd,
                      MAX(Start_date) AS max_sd
               FROM   rooms
               WHERE  Room_type   = 'luxury'     AND
                      End_date   >= '2012-08-30' AND
                      Start_date <= '2012-09-04'
               ) b
    WHERE      a.Room_type   = 'luxury'     AND
               a.End_date   >= '2012-08-30' AND
               a.Start_date <= '2012-09-04'
    

    2012-08-30のオカレンスを置き換えます および2012-09-04 入力した開始日と終了日をそれぞれ指定します。

    これは、開始日と終了日が同じ月であり、複数の月にまたがることを考慮しています。

    SQLFiddleデモ



    1. Docker上のMySQL-データベースをコンテナ化する方法:新しいホワイトペーパー

    2. solrスキーマの日時フィールド

    3. MySQL:クエリの週番号からの週の日付範囲

    4. データベース内の一時レコードをスケーリングして合計をカウントし、オーバーサブスクライブを停止します