2017-10-11 120 views
0

比較日期我有兩個表在MySQL子查詢

class 
------------- 
id name 
------------- 
1  Knives 
2  Pastries 


class_date 
------------- 
get_id start_date 
------------- 
1   2017-10-09 
1   2017-11-15 
1   2017-12-03 
2   2017-10-30 

類「刀」是具有多個日期的系列。班級'糕點'只在一個日期提供。

我希望我的結果基於2017年10月10日(或當前日期)。在我的搜索中,我只希望根據第一次約會的結果 - 在這種情況下,2017年10月9日「刀具」的日期應該取消它在結果中顯示的資格。 '糕點'應該出現。

我不知道我是否應該做一個左外部聯接或子查詢。我已經嘗試過兩種,但都沒有成功 - 但我可能沒有正確地做。

這是我的嘗試:

SELECT * 
FROM class, class_date WHERE 
class_date.get_id = class.id && 
(SELECT DATE(start_date) 
FROM class, class_date WHERE 
class_date.get_id = classes.id 
ORDER BY class_date.start_date ASC 
LIMIT 1 
) > CURDATE() 
ORDER BY class_date.start_date ASC 

SELECT * 
FROM class 
LEFT OUTER JOIN 
class_date ON 
class_date.get_id = classes.id 
WHERE 
class_date.start_date > CURDATE() 
GROUP BY classes.class_id 
ORDER BY class_dates.start_date ASC 

我有一種感覺,子查詢是要走的路,但我沒有得到任何結果。如果我使用<而不是>我得到太多結果。任何幫助,將不勝感激。

+0

我覺得你的描述混淆刀和糕點。 –

回答

0

以下是一種獲取特定日期最近記錄的方法。這可以讓你得到所有行(你可以在class加入讓行那裏):

select cd.* 
from class_date cd 
where cd.date = (select max(cd2.date) 
       from class_date cd2 
       where cd2.get_id = cd.get_id and 
         cd2.date <= '2017-10-09' 
       ); 

如果你只是想給定類的最大日期:

select cd.get_id, max(cd.date) 
from class_date cd 
where cd.date <= '2017-10-09' 
group by cd.get_id; 
+0

謝謝 - 我想我可以得到相關的日期,然後通過結果循環獲取課程信息。儘管如此,我正在考慮更優雅的解決方案。 – roboron