Sql按多列排序

Pan*_*kaj 13 sql oracle sql-order-by

我有以下结果

VendorName | IncidentID | IncidentStatus | IncidentDate
-------------------------------------------------------
XYZ        | 100        |     Open       | 02-JUN-2011    
XYZ        | 101        |     Open       | 03-JUN-2011  
ABC        | 102        |     Open       | 01-JUN-2011  
XYZ        | 103        |     Open       | 01-APR-2011  
ABC        | 105        |     Open       | 05-JUN-2011 
Run Code Online (Sandbox Code Playgroud)

我想订购VendorName最新的事件.供应商ABC有最新的事件,因此它应该首先与同一供应商的所有其他事件,然后下一个供应商与所有相应的事件降序.期望的结果是这样的 -

VendorName | IncidentID | IncidentStatus | IncidentDate  
-------------------------------------------------------
ABC        | 105        |     Open       | 05-JUN-2011 
ABC        | 102        |     Open       | 01-JUN-2011
XYZ        | 101        |     Open       | 03-JUN-2011 
XYZ        | 100        |     Open       | 02-JUN-2011    
XYZ        | 103        |     Open       | 01-APR-2011  
Run Code Online (Sandbox Code Playgroud)

ORDER BY IncidentDate desc, VendorName没有给出所需的输出.有帮助吗?

Rog*_*ger 26

使用分析函数:

SELECT *
FROM(
    SELECT 
        VendorName, 
        IncidentID, 
        IncidentStatus, 
        IncidentDate, 
        MAX(IncidentDate) OVER (PARTITION BY VendorName) maxDate
    FROM yourTable
) t
ORDER BY t.maxDate DESC, t.VendorName ASC, t.IncidentDate DESC
Run Code Online (Sandbox Code Playgroud)

请参阅: http://docs.oracle.com/javadb/10.8.2.2/ref/rrefsqlj13658.html http://docs.oracle.com/cd/E11882_01/server.112/e10592/functions003.htm HTTP:/ /docs.oracle.com/cd/E11882_01/server.112/e26088/functions004.htm