ORACLE aufsummieren von nicht paralellen zeiten

mafin

Mitglied
Hallo zusammen,

ich habe ein Problem.
Wie kann ich meine Datensätze aufsummieren und dabei untersuchen lassen und dann auch nur noch das aufsummieren wo die Zeiten nicht identisch sind.

Zur Veranschaulichung:

3 Produkte werden auf einem PC verwendet. Teilweise parallel.

Produkt 1 zu folgender Zeit
.....................................
Produkt 2 zu
____________...........................................................................
Produkt 3 zu
______________________________________.........................................................

(Punkte = Benutzung)
(Linie = keine Benutzung)

Wie man erkennen kann laufen die Zeiten teilweise parallel. Wenn ich diese also aufsummiere, dann bekomme ich aber nicht die "echte Zeit", also die Zeit in der die Produkte 1-3 gelaufen sind. Ich habe also zu viel aufsummiert.

Geht das überhaupt? Wenn ja, wie?


Meine aktuelle Abfrage:
Code:
SELECT rechner, SUM(TO_NUMBER (TO_CHAR (endzeit, 'SSSSS')) - TO_NUMBER (TO_CHAR (startzeit, 'SSSSS'))) AS ZEIT from benutzteprodukte
                WHERE benutzteprodukte.endzeit > TO_TIMESTAMP(SYSDATE-31, 'dd.mm.yy') 
                AND (produkt LIKE '%p1%' OR produkt LIKE '%p2%' OR produkt LIKE '%p3%' OR produkt LIKE '%p4%')
                GROUP BY rechner
                ORDER BY SUM(TO_NUMBER (TO_CHAR (endzeit, 'SSSSS')) - TO_NUMBER (TO_CHAR (startzeit, 'SSSSS'))) DESC
 
Zuletzt bearbeitet:
Hallo,

schienbar möchtest Du für die Produkte einzeln die Summen der Zeiten bilden!?

Evtl. hilft Dir der CASE WHEN Operator?

Beispiel: Erfasse die Summen der Tage für jedes Produkt:
PHP:
SELECT 
        rechner
        , SUM(CASE WHEN produkt LIKE '%p1%' THEN TO_NUMBER (TO_CHAR (endzeit, 'SSSSS')) - TO_NUMBER (TO_CHAR (startzeit, 'SSSSS'))END ) AS ZEIT_P1 
        , SUM(CASE WHEN produkt LIKE '%p2%' THEN TO_NUMBER (TO_CHAR (endzeit, 'SSSSS')) - TO_NUMBER (TO_CHAR (startzeit, 'SSSSS'))END ) AS ZEIT_P2
        , SUM(CASE WHEN produkt LIKE '%p3%' THEN TO_NUMBER (TO_CHAR (endzeit, 'SSSSS')) - TO_NUMBER (TO_CHAR (startzeit, 'SSSSS'))END ) AS ZEIT_P3
        , SUM(CASE WHEN produkt LIKE '%p4%' THEN TO_NUMBER (TO_CHAR (endzeit, 'SSSSS')) - TO_NUMBER (TO_CHAR (startzeit, 'SSSSS'))END ) AS ZEIT_P3

FROM 
        benutzteprodukte
WHERE 
        benutzteprodukte.endzeit > TO_TIMESTAMP(SYSDATE-31, 'dd.mm.yy') 
AND 
        (
         produkt 
         LIKE '%p1%' OR produkt 
         LIKE '%p2%' OR produkt 
         LIKE '%p3%' OR produkt 
         LIKE '%p4%'
        )
                
GROUP BY 
        rechner

Hilft Dir das?
 
Zuletzt bearbeitet:
Danke erstmal für die Hilfe. Ich möchte das gerade ausprobieren, aber da kommt jetzt immer ne Fehlermeldung, dass das Schlüsselwort fehlt.
 
Hallo,
Schau bitte ob das hier bei dir funktioniert. Damit simuliere ich Deine Tabelle.
Wie sind die Datentypen bei Dir für entzeit , startzeit? Kannst Du bitte mal Dein DDL posten, also wie sind die Tabellen definiert, Datentypen u.s.w.

SQL:
SELECT 
        rechner
        , SUM(CASE WHEN produkt LIKE '%p1%' THEN TO_NUMBER (TO_CHAR (endzeit, 'SSSSS')) - TO_NUMBER (TO_CHAR (startzeit, 'SSSSS'))END ) AS ZEIT_P1 
        , SUM(CASE WHEN produkt LIKE '%p2%' THEN TO_NUMBER (TO_CHAR (endzeit, 'SSSSS')) - TO_NUMBER (TO_CHAR (startzeit, 'SSSSS'))END ) AS ZEIT_P2
        , SUM(CASE WHEN produkt LIKE '%p3%' THEN TO_NUMBER (TO_CHAR (endzeit, 'SSSSS')) - TO_NUMBER (TO_CHAR (startzeit, 'SSSSS'))END ) AS ZEIT_P3
        , SUM(CASE WHEN produkt LIKE '%p4%' THEN TO_NUMBER (TO_CHAR (endzeit, 'SSSSS')) - TO_NUMBER (TO_CHAR (startzeit, 'SSSSS'))END ) AS ZEIT_P3



--SELECT rechner, produkt, TO_NUMBER (TO_CHAR (endzeit, 'SSSSS')) - TO_NUMBER (TO_CHAR (startzeit, 'SSSSS'))
FROM 
        (
        SELECT 'toms_rechner' rechner,'p1'produkt, SYSDATE -10 startzeit, SYSDATE-1/3 endzeit FROM dual 
        UNION
        SELECT 'lalas_rechner' rechner, 'p2'produkt, SYSDATE -10 startzeit, SYSDATE-5/3 endzeit FROM dual 
        UNION
        SELECT 'toms_rechner' rechner,'p2'produkt, SYSDATE -10 startzeit, SYSDATE-5/2 endzeit FROM dual 
        UNION
        SELECT 'toms_rechner' rechner,'p1'produkt, SYSDATE -10 startzeit, SYSDATE-1/34 endzeit FROM dual 
        UNION
        SELECT 'lalas_rechner' rechner,'p3'produkt, SYSDATE -10 startzeit, SYSDATE-3/6 endzeit FROM dual 
        UNION
        SELECT 'lalas_rechner' rechner,'p4'produkt, SYSDATE -10 startzeit, SYSDATE-3/5 endzeit FROM dual 
        )        
        benutzteprodukte
WHERE 
        benutzteprodukte.endzeit > TO_TIMESTAMP(SYSDATE-31, 'dd.mm.yy') 
AND 
        (
         produkt 
         LIKE '%p1%' OR produkt 
         LIKE '%p2%' OR produkt 
         LIKE '%p3%' OR produkt 
         LIKE '%p4%'
        )
                
GROUP BY 
        rechner
 
Zuletzt bearbeitet von einem Moderator:
Zurück