2010-12-23 55 views
1

我有兩個左表加入。該查詢按左表的ID列分組。右表有一個名爲close_date的日期列。問題是,如果有任何沒有關閉的右表記錄(因此有關閉日期爲0000-00-00),那麼我不希望顯示任何左表記錄,並且如果沒有右記錄表格記錄的close_date爲0000-00-00,我只想返回MAX關閉日期的右表記錄。mysql查詢試圖通過涉及CASES和聚合函數的別名進行搜索

所以爲了簡單起見,假設表是這樣的:

Table1 
id 
1 
2 

Table2 
table1_id | close_date 
1   | 0000-00-00 
1   | 2010-01-01 
2   | 2010-01-01 
2   | 2010-01-02 

我想查詢只返回這個:

Table1.id | Table2.close_date 
2   | 2010-01-02 

我試圖想出一個答案使用別名CASES和集合函數,但我無法按結果進行搜索,並且我試圖不做3英里長的查詢來解決問題。我瀏覽了這裏的一些相關帖子,但沒有一個看起來符合這個特例的標準。

+0

魔法常數是邪惡的。爲什麼不使用數據庫設計的方法,即NULL。 – 2010-12-23 18:01:55

回答

2

用途:

SELECT t1.id, 
     MAX(t2.close_date) 
    FROM TABLE1 t1 
    JOIN TABLE2 t2 ON t2.table1_id = t1.id 
WHERE NOT EXISTS(SELECT NULL 
        FROM TABLE2 t 
        WHERE t.table1_id = t1.id 
        AND t.closed_date = '0000-00-00') 

的 '0000-00-00' 應該由MySQL被隱式轉換爲DATETIME。如果不是,則將該值轉換爲DATETIME。

0

嘗試:

select table1id,close_date form table2 
where close_date= (select max(close_date) from table2) or close_date='0000-00-00' 
+0

不過濾出id爲close_date(零日期)的行。 – 2010-12-23 17:59:20

+0

@OMG零日期不需要如有問題 – XMen 2010-12-23 18:02:13