mysql min忽略null-需要变通/调整

mysql min忽略null-需要变通/调整,mysql,Mysql,对于此查询 SELECT min(date) min_date FROM order_products group by order_id min\u date忽略订单id组中的NULL值 在我的例子中,如果组的order\u products元组的date值为NULL,我希望min\u date=NULL 有什么办法可以做到这一点吗?如果您的问题域允许定义“绝对最小日期”,那么其中一种方法就是使用ISNULL()/COALESCE()表达式将可空字段转换为非空字段 ISNULL(日期字段,

对于此查询

SELECT min(date) min_date FROM  order_products group by order_id
min\u date
忽略订单id组中的
NULL

在我的例子中,如果组的order\u products元组的date值为NULL,我希望min\u date=NULL


有什么办法可以做到这一点吗?

如果您的问题域允许定义“绝对最小日期”,那么其中一种方法就是使用ISNULL()/COALESCE()表达式将可空字段转换为非空字段

ISNULL(日期字段,'1000-01-01')


另一种方法(如果无法定义有意义的“最小”默认值)是通过两个查询来完成,首先选择带有null的填充,然后如果结果集为空,则在date不为null的地方添加填充。简单的解决方法可以是:

SELECT min(IFNULL(date, '1970-01-01')) AS min_date 
FROM order_products 
GROUP BY order_id
所以,如果出现1970/01/01,你知道有一个空值

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

或者,当所有行都不为空时,返回min date,否则返回null。

如果问题是关于从多个列中查找最小日期,则以下内容可能会有所帮助

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;

此查询将所有最小日期值返回为“1970-01-01”。你确定这个有效吗?你以前试过吗?@shikhar:不,我以前没有试过,但我现在试过了,它对我有效。也许所有订单中都有空的?