-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'))

顺便说一句,我正在使用codeigniter。

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 回答