我正在尝试使用 2 个表之间的最大时间戳对我的记录进行排序。
现在我使用以下 order
条件:
ORDER BY
GREATEST(
IFNULL(tableA.create_time, 0),
IFNULL(tableB.create_time, 0)
)
DESC
但是执行查询时,结果根本没有排序。我错过了什么?
(我正在使用 IFNULL
因为时间戳也可以是 NULL
)
编辑
正如我在评论中所说,当我选择最大的以查看它的值(value)时,结果我得到“2014-0”而不是“2014-08-14 17:04:39”
最佳答案
奇怪的是,IFNULL 似乎在处理 TIMESTAMP 和 INT 时遇到了麻烦,看起来下面的方法可以解决这个问题:
ORDER BY
GREATEST(
COALESCE(tableA.create_time, 0),
COALESCE(tableB.create_time, 0)
)
DESC
似乎返回了正确的结果。无论如何,我更喜欢 COALESCE 而不是 IFNULL,因为它更灵活且符合 ANSI 标准。
更新
在进一步调查中.. 这太奇怪了,你描述的问题只发生在 5.5.32(MySQL fiddle 选项)并且需要 GREATEST 或 LEAST 函数,两个不同的 TIMESTAMPS,IFNULL round one with INT replacement, JOIN 到适当的表(不是子选择)和 ORDER BY 以显示。疯狂的蛋糕!哦,表必须是 InnoDB,为什么不是!?
我发现重现此问题的最小值是:
CREATE TABLE tablea (
create_time timestamp
) ENGINE=InnoDB;
INSERT INTO `tablea` (create_time) VALUES (NOW());
SELECT GREATEST(t1.create_time,IFNULL(NOW(),0))
FROM tablea t1
JOIN tablea t2
ORDER BY 1;
关于Mysql:使用最大的时间戳排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25316651/