我有一个查询:

SELECT
    taskDeadline,
    subtasksDeadline,
    REPLACE(
        LEAST(
            COALESCE(t.deadline, 2147483647),
            COALESCE(sub.deadline, 2147483647)
        ), 2147483647, NULL
    ) AS Deadline
FROM
    tasks t
    LEFT OUTER JOIN subtasks sub ON sub.task_id = t.id


这将产生如下结果:

taskDeadline | subtasksDeadline | Deadline
1338501600   | 1333058400       | 1333058400
1334268000   | NULL             | 1334268000
NULL         | 1328050800       | 1328050800
NULL         | NULL             | NULL
1353798000   | 0                | 0
0            | 1353798000       | 0


我快到了。我使用2147483647作为数据类型(Mysql INT)的最大值,我仍然遇到的唯一问题是,如果我有两个值(其中一个为0),我想获取另一个值。我花了一些时间,但无法到达那里。有人可以阐明这一点吗?

最佳答案

或者只是将NULLIF添加到您现有的COALESCE中-

SELECT
    taskDeadline,
    subtasksDeadline,
    NULLIF(
        LEAST(
            COALESCE(NULLIF(t.deadline, 0), 2147483647),
            COALESCE(NULLIF(sub.deadline, 0), 2147483647)
        ), 2147483647
    ) AS Deadline
FROM
    tasks t
    LEFT OUTER JOIN subtasks sub ON sub.task_id = t.id

关于mysql - 查询以获取大于零且不为NULL的最小值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9684757/

10-10 16:23