Dies ist in Oracle 11g oder 12c geschrieben ...Oracle Ausfallzeiten in Minuten pro Monat
Hallo,
ich diese Daten in Stunden Ausfallzeit für die letzten 12 Monate zu formen versucht bin, geformt auf diese Weise ein Diagramm zu unterstützen.
In der folgenden Oracle SQL-Abfrage zeigt die kommentierte Abfrage "M", wie pro Monat ein Datensatz eingefügt wird. Die Abfrage "M" zeigt die endgültige Form an, die ich benötige, außer dass ich die Ausfallminuten benötige, die in jede Monatsablage fallen.
Die Daten werden jedoch von der Abfrage "D" zur Verfügung gestellt, die ich wegen dieses Beispiels verspottet habe. Natürlich könnte ein besseres Beispiel mehr Kantenfälle zeigen, wie zum Beispiel den ersten eines Monats usw. Aber dieses Beispiel wird ausreichen.
WITH
/*
M AS (
SELECT ADD_MONTHS (TRUNC (SYSDATE, 'MONTH'), -1 * LEVEL) AS MO
, 0 AS DOWNTIME FROM DUAL
CONNECT BY LEVEL <= 12),
*/
D AS ( -- data simulating a downtime day
SELECT 'Target Up' AS AVAILABILITY_STATUS,
TO_DATE ('9/25/2015 15:12:47', 'MM/DD/YYYY HH24:MI:SS')
AS SINCE,
385392 AS MINUTES
FROM DUAL
UNION ALL
SELECT 'Target Down' AS AVAILABILITY_STATUS,
TO_DATE ('11/25/2015 15:12:00', 'MM/DD/YYYY HH24:MI:SS')
AS SINCE,
1440 AS MINUTES
FROM DUAL
UNION ALL
SELECT 'Target Up' AS AVAILABILITY_STATUS,
TO_DATE ('11/26/2015 15:12:00', 'MM/DD/YYYY HH24:MI:SS')
AS SINCE,
200122 AS MINUTES
FROM DUAL)
SELECT *
FROM D
PIVOT
(SUM (MINUTES)
AS TIME
FOR AVAILABILITY_STATUS
IN ('Target Up' AS UP,
'Target Down' AS DOWN,
'Blackout' AS BLACKOUT));
Das Ergebnis sieht nun wie folgt aus:
SINCE UP_TIME DOWN_TIME BLACKOUT_TIME 9/25/2015 3:12:47 PM 385,392 11/25/2015 3:12:00 PM 1,440 11/26/2015 3:12:00 PM 200,122
aber ich brauche es wie folgt aussehen:
MO DOWN_MINUTES 3/1/2016 0 2/1/2016 0 1/1/2016 0 12/1/2015 0 11/1/2015 1440 10/1/2015 0 9/1/2015 0 8/1/2015 0 7/1/2015 0 6/1/2015 0 5/1/2015 0 4/1/2015 0
PS: Zum Wohle der Gruppe, die tatsächliche Die Ausfallzeit in der Abfrage "M" wird von der folgenden Abfrage generiert, die von Oracle Enterprise Manager lautet:
WITH X
AS (SELECT START_TIMESTAMP,
NVL (END_TIMESTAMP, SYSDATE) AS END_TIMESTAMP,
AVAILABILITY_STATUS,
TRUNC (
(NVL (END_TIMESTAMP, SYSDATE) - START_TIMESTAMP) * 24 * 60)
MINUTES
FROM MGMT$AVAILABILITY_HISTORY
WHERE AVAILABILITY_STATUS IN
('Target Down', 'Target Up', 'Blackout')
)
SELECT AVAILABILITY_STATUS,
MIN (START_TIMESTAMP) AS SINCE,
SUM (MINUTES) AS MINUTES
FROM X
GROUP BY AVAILABILITY_STATUS
ORDER BY MIN (START_TIMESTAMP);
Vielen Dank im Voraus. Ich habe meine Räder seit Tagen gedreht und es ist Zeit, um Hilfe zu bitten.
Perfect! Vielen Dank, Adam. Clevere Gruppierung! – SMerrill8