2010-03-31 67 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;