-1

指定された日付に応じて異なる価格を格納する room_prices というテーブルがあります。サンプルデータはこちら。

id  room_id date_from   date_to     price
1   1                               3500.00
25  1       7/28/2012   7/29/2012   3600.00
27  1       8/24/2012   8/27/2012   3000.00
49  1       11/12/2012  11/16/2012  4000.00

最初の行は、部屋 1 (room_id = 1) のデフォルト料金です。

ゲストが部屋を予約すると、システムは最初に room_prices テーブルの価格を調べます。ゲストが予約した日付がテーブルで見つかった場合、デフォルトの価格ではなく、選択した日付に従って価格が取得されます。

元。

ゲストが 2012 年 11 月 10 日から 2012 年 11 月 11 日までに部屋を予約した場合、料金は 3,500 になります。ゲストが 2012 年 11 月 12 日から 2012 年 11 月 14 日までに部屋を予約した場合、料金は 4,000 になります。

ゲストが 2012 年 11 月 10 日から 2012 年 11 月 13 日までに部屋を予約した場合、平均価格は 3750 になります。以下の表を参照してください。

11/10/2012  3500
11/11/2012  3500
11/12/2012  4000
11/13/2012  4000
            3750

私の質問は、平均価格を取得する単一の SQL コードがあるかどうかです。

アップデート:

私はこのSQLを無駄に試しました:

SELECT avg(price) as avg_price
                        FROM lf_rooms_prices
                        WHERE room_id = 1
                        AND ((DATE_FORMAT(date_from, '%m/%d/%Y') >= '11/10/2012' 
                        AND DATE_FORMAT(date_from, '%m/%d/%Y') < '11/10/2012') 
                        OR (DATE_FORMAT(date_to, '%m/%d/%Y') > '11/13/2012' 
                        AND DATE_FORMAT(date_to, '%m/%d/%Y') <= '11/13/2012'))

ところで、私はコードイグナイターを使用しています。

4

1 に答える 1

1

関数がAVG()あるので、平均価格を取得するには、クエリは次のようになります。

SELECT AVG(`price`) FROM `room_prices` GROUP BY `room_id` 

こちらのドキュメントを参照してください。もちろん、クエリに WHERE を追加して、平均値が必要なデータセットを絞り込むことができます。

SELECT AVG(`price`) FROM `room_prices` WHERE <CONDITIONS> GROUP BY `room_id` 

編集:

完全なクエリ:

SELECT AVG(`price`) FROM `room_prices` 
    WHERE `room_id` = 1
          AND ((DATE_FORMAT(date_from, '%m/%d/%Y') >= '11/10/2012' 
          AND DATE_FORMAT(date_from, '%m/%d/%Y') < '11/10/2012') 
          OR (DATE_FORMAT(date_to, '%m/%d/%Y') > '11/13/2012' 
          AND DATE_FORMAT(date_to, '%m/%d/%Y') <= '11/13/2012'))
GROUP BY `room_id` 

使うのがポイントGROUP BYです。

于 2012-11-02T02:18:09.023 に答える