MySQL返回最大值,如果一列没有值,则返回null

Yen*_*nky 6 mysql null max min

我尝试获取mysql select的最大值,但是如果有一行不包含时间戳,则希望将其设置为null/empty/0.

表统计(简称):

   ID   CLIENT   ORDER_DATE      CANCEL_DATE

    1     5      1213567200
    2     5      1213567200
    3     6      1210629600      1281736799
    4     6      1210629600      1281736799
    5     7      1201042800      1248386399
    6     7      1201042800      
    7     8      1205449200      1271282399
Run Code Online (Sandbox Code Playgroud)

我现在想要获得最低订单日期(没问题,因为它永远不会是空的),以及最长取消日期.如果客户已经取消了他的订阅,则取消日期已被填写,但如果他仍然有效,则根本没有取消日期.

查询:

SELECT ID, min(ORDER_DATE) AS OD, max(CANCEL_DATE) AS CD FROM stats GROUP BY CLIENT
Run Code Online (Sandbox Code Playgroud)

返回:

ID    OD           CD
 5    1213567200                  // fine
 6    1210629600   1281736799     // fine
 7    1201042800   1248386399     // Should be empty
 8    1205449200   1271282399     // fine
Run Code Online (Sandbox Code Playgroud)

如果客户端有一个(或多个)空列,我无法弄清楚如何返回空/ 0/NULL.还尝试使用NULL字段.

谢谢你的任何提示.

小智 6

我不知道它会有多快,但我猜它可以像这样解决:

SELECT ID, min(ORDER_DATE) AS OD,
IF(COUNT(*)=COUNT(CANCEL_DATE),max(CANCEL_DATE),NULL) AS CD 
FROM stats GROUP BY CLIENT
Run Code Online (Sandbox Code Playgroud)

我无法测试它,但这个解决方案背后的想法是,count(cancel_date)应该计算所有非空值条目,如果它等于,count(*)这意味着没有空值,它将返回max(cancel_date),否则为null.