2010-03-31 22 views
5

對於該查詢的MySQL分鐘忽略空 - 需要解決方法/調整

SELECT min(date) min_date FROM order_products group by order_id 

min_date忽略一組訂單ID的在NULL值。

在我的情況下,我希望min_date = NULL,如果該組有一個order_products在日期爲空值的元組。

任何想法我怎麼能做到這一點?

回答

9

簡單的解決方法可能是:

SELECT min(IFNULL(date, '1970-01-01')) AS min_date 
FROM order_products 
GROUP BY order_id 

所以,如果1970/01/01輪番上漲,你知道,有一個NULL值。

+0

此查詢將所有min_date值返回爲'1970-01-01'。你確定這一個工程,你有沒有嘗試過嗎? – shikhar 2010-03-31 13:15:35

+1

@shikhar:不,我以前沒有嘗試過,但現在我嘗試了它,它對我很有用。所有訂單中可能有NULL? – Bobby 2010-03-31 13:24:02

+0

嘿謝謝..我真的有所有NULL ..它的工作 – shikhar 2010-03-31 14:15:12

0

如果您的問題域允許定義「絕對最小日期」,則使用ISNULL()/ COALESCE()表達式將可爲空的字段變爲非空值。

ISNULL(dateField, '1000-01-01')

另一個(F沒有意義的「最小的」默認可以被定義)是通過2個查詢做到這一點 - 用null第一選擇的東西,然後如果結果集是空的,加入的東西,其中日期NOT NULL

0
select case when count(date)=sum(1) then min(date) else null end 

或者,當所有的行不爲空時,返回最小日期,否則返回null。

1

如果問題是關於從多列中找到最短日期,那麼以下內容可能會有幫助;

SELECT 
     LEAST 
      (IFNULL(date_1, date(CURRENT_DATE()+1)), 
      IFNULL(date_2, date(CURRENT_DATE()+1)), 
      IFNULL(date_3, date(CURRENT_DATE()+1))) as MinimumDate 
FROM YourTable;