2013-08-07 128 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' 

試試上面的查詢可以工作的罰款

相關問題