Mysql:在时间戳上使用最大的订单

时间:2014-08-14 20:02:03

标签: mysql sql sql-order-by

我正在尝试使用两个表之间的最大时间戳来对记录进行排序。 现在我使用以下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'

这是Sql fiddle甚至是simpler one with the same problem

1 个答案:

答案 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;