J'ai le résultat ci-dessous
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
Je veux commander VendorName
qui a le dernier incident. Le fournisseur ABC
a le dernier incident et doit donc venir en premier avec tous les autres incidents du même fournisseur, puis le prochain fournisseur avec tous les incidents respectifs, par ordre décroissant. Le résultat souhaité est le suivant:
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
ne donne pas la sortie désirée. De l'aide ?
Utiliser des fonctions analytiques:
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
Voir: http://docs.Oracle.com/javadb/10.8.2.2/ref/rrefsqlj13658.htmlhttp://docs.Oracle.com/cd/E11882_01/ server.112/e10592/functions003.htmhttp://docs.Oracle.com/cd/E11882_01/server.112/e26088/functions004.htm
Cela va le faire ...
ORDER BY MAX(INCIDENTDATE) OVER (PARTITION BY VENDORNAME) DESC, INCIDENTDATE DESC
... mais je ne suis pas sûr que la fonction analytique soit autorisée dans ORDER BY. Si ce n'est pas le cas, calculez-le dans une sous-requête et triez-le dans la requête principale ...
select ...
from (
select Max(incidentdate) over (partition by vendorname) max_incidentdate_by_vendor,
...)
order by max_incidentdate_by_vender desc, incidentdate desc
Si vous êtes sur une installation 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;