sourcecode

여러 열에 대한 SQL 순서 지정

copyscript 2023. 6. 28. 21:54
반응형

여러 열에 대한 SQL 순서 지정

저는 아래와 같은 결과를 얻었습니다.

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 

주문하고 싶습니다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  

ORDER BY IncidentDate desc, VendorName원하는 출력을 제공하지 않습니다.도와드릴까요?

분석 기능 사용:

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

참조: 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

이것으로 충분합니다...

ORDER BY MAX(INCIDENTDATE) OVER (PARTITION BY VENDORNAME) DESC, INCIDENTDATE DESC

하지만 분석 기능이 ORDER BY에 허용되는지는 잘 모르겠습니다.그렇지 않은 경우 하위 쿼리에서 계산하고 기본 쿼리에서 순서를 지정합니다.

select ...
from   (
  select Max(incidentdate) over (partition by vendorname) max_incidentdate_by_vendor,
         ...)
order by max_incidentdate_by_vender desc, incidentdate desc

RAC를 설치하는 경우

set linesize 300
column REDOLOG_FILE_NAME format a50
SELECT
    a.INST_ID,
    a.GROUP#,
    a.THREAD#,
    a.SEQUENCE#,
    a.ARCHIVED,
    a.STATUS,
    b.MEMBER    AS REDOLOG_FILE_NAME,
    (a.BYTES/1024/1024/1024) AS SIZE_GB
FROM gv$log a
JOIN gv$logfile b ON a.Group#=b.Group# 
AND a.INST_ID=b.INST_ID 
ORDER BY a.INST_ID ASC, a.GROUP# ASC;
select vendorname, incidentid, incidentstatus, incidentdate, max(incidentdate) 
over (partition by vendorname order by incidentdate desc) max_incidentdate
from t1 order by max_incidentdate desc, incidentdate desc

언급URL : https://stackoverflow.com/questions/13897024/sql-order-by-on-multiple-column

반응형