【问题标题】:SQL Select Max of Columns Where Date is Not NullSQL 选择日期不为空的最大列数
【发布时间】:2018-07-13 17:07:48
【问题描述】:

我目前正在使用此查询来选择一些数据: SELECT DISTINCT a.code AS code, name, max(scen.Is3D) AS Is3D FROM locations LEFT JOIN ...scen 表包含 Is3DDate 列。我只想选择日期为IS NOT NULL 的项目的最大值。我试过max(scen.Is3D WHERE scen.Date IS NOT NULL),但没用。在我的查询中FROM 之后我无法更改任何内容,因此如果可能的话,我需要在 MAX 中进行过滤。我正在使用 MySQL 5.7。

【问题讨论】:

    标签: mysql sql


    【解决方案1】:

    你可以使用:

    MAX(CASE WHEN scen.date IS NOT NULL THEN scen.Is3D END) AS Is3D
    

    CASE 表达式在不满足任何WHEN 条件时返回NULL,但MAX() 忽略空值,因此这将只返回所选行中Is3D 列的最大值。

    【讨论】:

    • 我改变了答案,因为这更简单并且对我正在做的事情更有意义
    【解决方案2】:

    所以如果我们在FROM 之后不能改变任何东西,那么我们就无法在这里得到完美的解决方案。因为你是SELECTing 出NULL 值。如果我们只能修改最终输出,我们可以尝试的一件事就是这个。

    SELECT MAX(ISNULL(scen.Date,0))...

    这会将所有 NULLs 替换为 0,但有助于准确了解您要执行的操作。为什么您如此确信查询本身不能以任何方式修改?

    另一种解决方案是将整个查询放在另一个包装器中。

    看起来像:

    SELECT * 
    FROM ( 
    [your whole query here]
    ) AS inner
    WHERE inner.Date IS NOT NULL 
    

    【讨论】:

    • 包装器肯定会工作,但不确定它是否是一个选项。 (猜对了)
    • 您应该检查Date 列中的NULL,而不是Is3D
    猜你喜欢
    • 2012-09-26
    • 1970-01-01
    • 2014-01-24
    • 1970-01-01
    • 2019-02-09
    • 2014-07-26
    • 2021-06-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多