【问题标题】:Multiple sort by columns in query查询中的多列排序
【发布时间】:2018-09-04 04:00:29
【问题描述】:

我有这个问题:

SELECT T1.* 
FROM TABLE1 
LEFT JOIN TABLE2 T2 ON T2.ID = T1.ID
ORDER BY T1.DATE DESC, T2.DATE DESC;

在上面的查询中,我使用了来自不同表的多个排序列。两个 order by 列都是时间戳数据类型。我的要求是:我需要对更高日期和时间(最新)的查询进行排序。例如,如果 T1.DATE 是最新的,那么我需要根据 T1.DATE 对查询进行排序,否则需要根据 T2.DATE 进行排序。

如何在ORDER BY 子句中处理这个问题?

同样,我也可能有 TABLE3。如果我加入该表,我还必须按 TABLE3 的 DATE 排序。有人有解决办法吗?

【问题讨论】:

    标签: sql database oracle datetime timestamp


    【解决方案1】:

    您可以使用greatest() 比较日期列,它返回每行所有参数的最大值:

    SELECT T1.* FROM TABLE1 
    LEFT JOIN TABLE2 T2 ON T1.ID = T2.ID
    LEFT JOIN TABLE2 T3 ON T2.ID = T3.ID
    ORDER BY greatest(T1.DATE, T2.DATE, T3.DATE) DESC;
    

    【讨论】:

    • 当心空值。如果 GREATEST 列表中有任何空值,则会得到空值结果。尝试最大 (nvl(t1.date,'date '1800-01-01'), nvl(t2.date, date '1800-01-01'), nvl(t3.date,date '1800-01-01' ))
    • 如你所说,也需要处理空条件。谢谢
    猜你喜欢
    • 2015-08-12
    • 2021-10-13
    • 1970-01-01
    • 2023-04-03
    • 1970-01-01
    • 2014-04-07
    • 2012-07-30
    • 1970-01-01
    • 2018-11-06
    相关资源
    最近更新 更多