在查询中按列进行多重排序

时间:2018-03-26 04:50:00

标签: sql database oracle datetime timestamp

我有这个问题:

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

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

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

同样,我也可能有TABLE3。如果我加入该表,我必须按照TABLE3的日期排序。有没有人有任何解决方案?

1 个答案:

答案 0 :(得分: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;