2014-07-02 54 views
3

我正在創建一個顯示開門時間的小應用程序。從數據庫獲取最新日期(但獲取具有該最新日期的所有行)

它的工作原理是這樣的:我生成一個日期列表,然後檢查數據庫,如果我們打開或沒有。

數據庫normal包含:

day_of_week | open | close | since 
    INT(11) | TIME | TIME | DATE 
------------|--------|--------|------------ 
    1  |09:00:00|17:00:00|2013-01-09 
    2  |08:00:00|18:00:00|2014-01-06 
...  

的,因爲最新的節目,因爲使用的openinghours什麼日期(這樣我就可以回頭看過去,並得到正確的時間,以及在未來。 )

在我的約會的名單我檢查since >= $date_in_list和獨顯最大值:

SELECT *,MAX(since) FROM normal WHERE day_of_week = '2' AND since <= '2014-06-03' 

這工作得很好,除非我有2侯rs與自同一日期(例如。當我們中午收盤)

所以當我有這樣的數據:

day_of_week | open | close | since 
------------|--------|--------|------------ 
    2  |09:00:00|12:00:00|2014-01-06 
    2  |14:00:00|18:00:00|2014-01-06 

我想同時獲得09:00:00 - 12:00:00和14:00:00 - 18:00:00,但我似乎無法找到正確的查詢。

回答

2

GROUP BY條款如何使用子查詢?沿着這些線

SELECT * 
FROM normal 
WHERE day_of_week = '2' 
    AND since = (
     SELECT MAX(since) 
     FROM normal 
     WHERE day_of_week = '2' 
    ) 
+0

工程就像一個魅力。謝謝。現在我有:'選擇*從正常的WHERE日='2',因爲=(選擇MAX(自)從正常的地方,因爲<='2014-06-03')' –

0

嘗試用這樣的

SELECT *, 
     MAX(since) 
FROM normal 
WHERE day_of_week = '2' 
    AND since <= '2014-06-03' 
GROUP BY `since`,`open`,`close`; 
+0

這也顯示了以前的小時,在這種情況下,它顯示了從'09:00:00 | 17:00:00 | 2013-01-09'和'08:00: 00 | 18:00:00 | 2014-01-06'於2014-06-03 –