我当前正在使用此查询来选择一些数据:
SELECT DISTINCT a.code AS code, name, max(scen.Is3D) AS Is3D FROM locations LEFT JOIN ...
。 scen
表具有列Is3D
和Date
的列。我只想选择日期为IS NOT NULL
的项目的最大值。我尝试了max(scen.Is3D WHERE scen.Date IS NOT NULL)
,但是没有用。我无法在查询中的FROM
之后进行任何更改,因此,如果可能的话,我需要在MAX中进行过滤。我正在使用MySQL 5.7。
答案 0 :(得分:2)
您可以使用:
MAX(CASE WHEN scen.date IS NOT NULL THEN scen.Is3D END) AS Is3D
当CASE
的任何一个都不满足时,NULL
表达式将返回WHEN
,但是MAX()
会忽略空值,因此它将仅返回{{ 1}}列。
答案 1 :(得分:1)
因此,如果我们在FROM
之后不能进行任何更改,那么我们将无法在此找到理想的解决方案。由于您正在SELECT
列出NULL
值。如果我们只能修改最终输出,我们可以尝试的一件事就是这样做。
SELECT MAX(ISNULL(scen.Date,0))...
这会将所有NULL
替换为0,但这将有助于准确了解您要执行的操作。为什么您如此确信查询本身无法以任何方式修改?
另一种解决方案是将整个查询放在另一个包装器中。
它看起来像:
SELECT *
FROM (
[your whole query here]
) AS inner
WHERE inner.Date IS NOT NULL