MySQL多列组合排序(不是按field1 asc,field2 asc排序)

6

这似乎是一个典型的问题,但它有所不同。

我有一张带有id和3个时间戳字段的表格(为了简便)。最初,这三个字段都为空,然后它们被填充了值。行的示例如下:

id time1      time2      time3
1  1259625661 1259643563 null
2   null      1259621231 null
3  1259625889 null       1259644511
4   null      1259621231 null
5   null      null       1259644511
6   null      1259621231 null
7  1259625889 null       null

我需要的是按最近时间戳排序的id列表(忽略它是否在time1,time2或time3中)。 执行order by time1 desc, time2 desc, time3 desc会给我一个错误的列表,因为它首先对所有time1字段进行排序,然后是第二个字段等等...
期望的结果是一个id列表。
这可以在MySQL中通过单个查询完成吗?谢谢
1个回答

13
SELECT  *
FROM    mytable
ORDER BY
        GREATEST(
        COALESCE(time1, 0),
        COALESCE(time2, 0),
        COALESCE(time3, 0)
        ) DESC

1
http://dev.mysql.com/doc/refman/5.0/en/comparison-operators.html#function_greatest 上的版本说明可能对提问的用户有用。 - jensgram
@jensgram:好观点。我添加了COALESCE来处理所有情况。 - Quassnoi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接