2013-08-07 127 views
3

我有一个要求,我完全困惑如何编写查询。我在这家公司更新鲜,所以请帮我Mysql查询检索使用两个日期之间的记录

用户会选择以下日期:

例如: FROM日期:2013-08-02 TODATE:2013-09-03(YYYY-MM-DD)

id resort_id room_id Date1  Date2  price 
5 35  45   2013-11-01 2013-11-30 3000.00 
6 35  50   2013-07-25 2013-08-25 2000.00 
7 35  541   2013-07-25 2013-08-25 4000.00 
8 35  541   2013-08-26 2013-09-26 4000.00 

现在我应该得到每个日期的价格为基础的结果或日期组的价格总和按房间编号

预期结果

id resort_id room_id  Date1  Date2  price 
6 35  50    2013-07-25 2013-08-25 2000.00 
7 35  541    2013-07-25 2013-08-25 4000.00 
8 35  541    2013-08-26 2013-09-26 4000.00 

OR

id resort_id  room_id price 
6 35    50  2000.00 
7 35    541  8000.00 
+0

你能请解释一下是Date1和Date2? – zxc

+0

这是一个复杂的查询 –

+1

@bew我认为这些是日期范围的价格 –

回答

2

尝试此查询

SELECT * FROM `rooms` WHERE "2013-08-02" between Date1 AND Date2 UNION 
SELECT * FROM `rooms` WHERE "2013-09-03" BETWEEN Date1 AND Date2 

其单个查询。为了便于阅读,将其分为两行。我很确定这个查询缺少一些东西。我需要一个更大的测试集来验证。这不会选择中间情况。 用您的用户选择的日期更改第一个日期。

+0

@SomeshMukerjee这个查询工作正常,我得到第一个预期的结果。 – user2660409

+0

我自己写了一个查询,我得到第二个预期的结果。 'SELECT resort_id,ROOM_ID,SUM(test_price.price) FROM test_price 其中 '2013年8月2日' 之间FROM_DATE 到TO_DATE OR '2013年9月3日' 之间FROM_DATE 到TO_DATE GROUP BY room_id' – user2660409

+0

小心,但如果日期介于2013年1月和2013年10月之间,则此操作可能不起作用。它不会选择介于两者之间的房间,但您应该可以从此处构建 –

0
select * from table_name where date1 > '08/02/2013' AND date2 < '09/02/2013' ORDER BY date1 ASC, price ASC 
+0

用户日期应该在date1和date2之间。例如:日期:08/02/2013适用于rowid:6和7,日期:09/02/2013适用于行ID 8.使用您的查询我得到0结果。 – user2660409

+0

,这将无法正常工作。这是一个基于时间间隔的问题 –

1

尝试此查询

SELECT 
    id, 
    resort_id, 
    room_id, 
    Date1, 
    Date2, 
    SUM(price) AS Total_Price 
FROM 
    MyTable 
WHERE Date1> '2013-02-08' AND Date2 < '2013-02-09' 
+0

,这是行不通的。你必须根据间隔 –

+0

@SomeshMukherjee选择感谢您的评论。新月你能提供我基于间隔的选择查询吗? – user2660409

+0

我得去设计它。提供日期yyyy-mm-dd格式 –

1

哎试试这个(SQL Server)的

SELECT ROOM_ID,SUM(价格)FROM @table WHERE date1> ='07/25/2013'和date2 < = '09/26/2013'GROUP BY room_id

+0

这与您的给定日期正常工作。但用户可以选择任何日期范围。 – user2660409

0

SELECT * FROM rooms WHERE日期1和date2 UNION SELECT *之间的日期从rooms WHERE日之间的日期1和date2

3
SELECT * FROM lr_price_peak_rates WHERE `from_date`>='2014-04-08' AND `to_date`<='2014-04-30' 

试试上面的查询可以工作的罚款

相关问题