当前位置: 首页 > 面试题库 >

MySQL:获取几列的MAX或GREATEST,但具有NULL字段

宋弘壮
2023-03-14
问题内容

我正在尝试在每个记录(MySQL)的三个不同字段中选择最大日期,因此,在每一行中,我都有date1,date2和date3:始终填充date1,date2和date3可以为NULL或为空GREATEST语句为简单明了,但对NULL字段没有影响,因此效果不佳:

SELECT id, GREATEST(date1, date2, date3) as datemax FROM mytable

我也尝试过更复杂的解决方案,例如:

SELECT
    CASE
        WHEN date1 >= date2 AND date1 >= date3 THEN date1
        WHEN date2 >= date1 AND date2 >= date3 THEN date2
        WHEN date3 >= date1 AND date3 >= date2 THEN date3
        ELSE                                        date1
    END AS MostRecentDate

此处存在相同的问题:NULL值是返回正确记录时的重大问题

拜托,你有解决办法吗?提前致谢....


问题答案:

采用 COALESCE

SELECT id, 
   GREATEST(date1, 
     COALESCE(date2, 0),
     COALESCE(date3, 0)) as datemax 
FROM mytable

更新:以前使用的答案IFNULL确实有效,但是正如Mike Chamberlain在评论中指出的那样,COALESCE实际上是首选方法。



 类似资料:
  • 问题内容: 为什么第一个INSERT要通过table2。请注意,table2.col_1不为NULL。它不会为col_1插入NULL,而是神秘地将NULL值转换为空字符串。我正在使用MySQL 5.5.28版本。谢谢 问题答案: 您已关闭MySQL的STRICT模式。打开它,您将得到一个错误。 否则,您可以通过以下方式使用PDO测试这些警告:http : //php.net/manual/en/p

  • 我有一个可选对象: 我想返回或如果为空返回。 我们是否有比遵循更复杂的方法来实现这一点?

  • 问题内容: 我有一个问题,我需要使用LEAST和GREATEST函数联接两个表,但要使用JPA CriteriaQuery。这是我要复制的SQL … 我看过CriteriaBuilder.least(..)和great(..),但是在尝试理解如何创建传递给任何一个函数的过程中遇到了困难。 问题答案: 事实证明,CriteriaBuilder确实支持将LEAST和GREATEST作为非聚合函数来调用

  • 问题内容: 我想获得最高值,但按同一表ex上的另一个字段分组: seqid + fileid +名称 结果必须是 seqid + fileid +名称 注意:所有字段都必须像使用select一样显示*我将不胜感激。tnx 问题答案: 怎么样

  • 问题内容: 桌子: 我想获取UserId,每个UserId的max(Date)值。即,具有最新日期的每个UserId的值。有没有一种方法可以简单地在SQL中做到这一点?(最好是Oracle) 更新: 对于任何歧义,我们深表歉意:我需要获取所有UserIds。但是对于每个UserId,仅该用户具有最新日期的那一行。 问题答案: 这将检索其my_date列值等于该用户ID的my_date最大值的所有行

  • 如何在MongoDB中获得字段中具有最小值或最大值的文档? 与MySQL中的MIN()或MAX()函数类似,但使用NodeJS MongoDB驱动程序。有什么想法吗?