我正在尝试使用两个表之间的最大时间戳来对记录进行排序。
现在我使用以下order
条件:
ORDER BY
GREATEST(
IFNULL(tableA.create_time, 0),
IFNULL(tableB.create_time, 0)
)
DESC
但执行查询时,结果根本没有排序。我错过了什么?
(我正在使用IFNULL
,因为时间戳也可以是NULL
)
修改
正如我在评论中所说的那样,当我选择最伟大的人看到它的价值时,我得到'2014-0'而不是'2014-08-14 17:04:39'
答案 0 :(得分:1)
奇怪的是,看起来IFNULL在TIMESTAMPs和INTs方面遇到了麻烦,看起来以下问题将解决这个问题:
ORDER BY
GREATEST(
COALESCE(tableA.create_time, 0),
COALESCE(tableB.create_time, 0)
)
DESC
似乎返回正确的结果。我更喜欢COALESCE和IFNULL,因为它更灵活,更符合ANSI标准。
<强>更新强>
进一步调查..这是非常奇怪的,你描述的问题只发生在5.5.32(MySQL小提琴选项)并且需要GREATEST或LEAST函数,两个不同的TIMESTAMPS,IFNULL圆形一个有INT替换,一个JOIN到一个正确的表(不是一个子选择)和一个ORDER BY来表示。疯狂的蛋糕!哦,桌子必须是InnoDB,为什么不呢!?
我发现复制此问题的 miminum 是:
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;