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

Posted

技术标签:

【中文标题】MySQL 按多列组合排序(不是按 field1 asc、field2 asc 排序)【英文标题】:MySQL Order by multiple column combined (not order by field1 asc, field2 asc) 【发布时间】:2009-12-01 15:12:54 【问题描述】:

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

我有一个带有 id 和 3 个时间戳字段的表(简单来说)。最初,所有 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 中)。 按 time1 desc、time2 desc、time3 desc 排序会给我一个错误的列表,因为它首先对所有 time1 字段进行排序,然后是第二个,等等...

预期结果是 id 的列表。

这可以在 mysql 中通过单个查询完成吗?谢谢

【问题讨论】:

【参考方案1】:
SELECT  *
FROM    mytable
ORDER BY
        GREATEST(
        COALESCE(time1, 0),
        COALESCE(time2, 0),
        COALESCE(time3, 0)
        ) DESC

【讨论】:

dev.mysql.com/doc/refman/5.0/en/… 的版本说明可能对用户询问有用。 @jensgram:很好。我添加了COALESCE 来处理所有情况。

以上是关于MySQL 按多列组合排序(不是按 field1 asc、field2 asc 排序)的主要内容,如果未能解决你的问题,请参考以下文章

按 Field1 Field2 Field3 ASC 和 DESC 对查询结果进行排序

我们如何在 MySQL 5.5 中快速进行此查询(按多列分组 + 排序,具有 2 个左连接)?

SQL 按多列分组,但在子句中给出一个范围值

(MySQL) 按字段排序 1=3,字段 2

SQL 多列排序

SQL 多列排序