Neuigkeiten:

Ist euer Problem gelöst, dann bitte den Knopf "Thema gelöst" drücken!

Mobiles Hauptmenü

Top 5 Abfrage mit doppelter Sortierung

Begonnen von Kyraldor, Oktober 01, 2015, 12:09:55

⏪ vorheriges - nächstes ⏩

Kyraldor

Hallo miteinander,

ich hoffe, ihr könnt mir bei meinem Problem weiterhelfen.
Ich habe eine Umfangreiche Datenbank, bei der u.a. eine Tabelle unserer Störungen enthält.
Dort werden u.a. Datum, Projekt, Fehlercode, Häufigkeit der Störung und  Störungsdauer erfasst.
Diese wird jeweils pro Jahr erfasst.

Jetzt soll eine Abfrage her, welche Die Top 5-Störungen pro Monat und Projekt (momentan 4 Stk) erfasst. Häufigkeit und Dauer sollen hierbei pro Fehlercode zusammengerechnet werden.

Leider habe ich bis jetzt noch keine intelligente Möglichkeit gefunden, das zu realisieren.
Gibt es eine Möglichkeit, diese in einer Abfrage zu Filtern, oder muss ich "in den sauren Apfel beißen" und pro Monat und
und Projekt eine einzelne Abfrage um das dann in einer Tabelle zu vereinen? Wäre es dann hierbei sinnvoll, eine weitere Teildatenbank zu erstellen um diese Abfragen (Was hier 12x4 Abfragen wären) sozusagen extra zu halten?

Vielen Dank schonmal für euere Hilfe.

el_gomero

#1
Hallo,

vom Grundsatz geht das über eine Abfrage in der Art:


SELECT TOP 5
Projekt, Sum(Haeufigkeit +Dauer) AS SumStoerung
FROM Tbl_Stoerung
GROUP BY Projekt
ORDER BY Sum(Haeufigkeit +Dauer) DESC;

wobei zu prüfen ist, ob Häufigkeit und Dauer einfach so addiert werden können. Ggf musst du eben Felder mit Datumswerten etc berücksichtigen, kannst du im GUI leicht probieren.
Gruß
Jürgen


Hilfe nach bestem Wissen, ohne Anspruch auf Richtigkeit und Vollständigkeit.
*feedback erwünscht*
Bitte Tipps lesen

MaggieMay

#2
Hi,

wenn die TOP 5 pro Projekt und Monat ermittelt werden sollen, kannst du das mit Hilfe einer Unterabfrage lösen:
Select t1.tabID, t1.Datum, t1.Projekt, t1.Fehlercode, t1.Häufigkeit, t1.Störungsdauer
FROM tbl_Stoerungen As t1
WHERE t1.tabID IN (SELECT TOP 5 t2.tabID
FROM tbl_Stoerungen As t2
WHERE Format(t2.Datum, "yyyymm") = Format(t1.Datum, "yyyymm") AND t2.Projekt = t1.Projekt
ORDER BY Sum(t2.Haeufigkeit) Desc, Sum(t2.Dauer) DESC);


PS:
Merke gerade, dass es so einfach wohl doch nicht geht, es fehlt noch die Zusammenfassung pro Fehlercode. Aber vielleicht ist das schon ein Schubs in die richtige Richtung.

PPS:
Häufigkeit und Dauer zu addieren halte ich für keine gute Idee, allerdings müsste noch festgelegt werden, welcher Wert für die Sortierung die höhere Priorität hat.
Freundliche Grüße
MaggieMay

Kyraldor

Vielen Dank erstmal für euere Antworten. Ich werd das am Montag gleich mal probieren, wenn ich wieder vor Ort bin.

Die Hauptpriorität hat erst einmal nur die Dauer.

Sprich welcher Fehlercode kostet uns monatlich die meiste Zeit bei den einzelnen Projekten.
Die Häufigkeit ist für uns vorerst nur eine Nebeninformation.

ebs17

ZitatDort werden u.a. Datum, Projekt, Fehlercode, Häufigkeit der Störung und  Störungsdauer erfasst.

Häufigkeit und Dauer sind da schon Tageszusammenfassungen, oder wie ist das zu verstehen?
Mit freundlichem Glück Auf!

Eberhard

Kyraldor

Zitat von: ebs17 am Oktober 01, 2015, 23:19:09
Häufigkeit und Dauer sind da schon Tageszusammenfassungen, oder wie ist das zu verstehen?

Ja, die Häufigkeit und Dauer werden bereits aus den Schichten pro Tag zusammengezählt.
Somit hab ich als Ergebnis z.B.

Datum        Störung         Projekt            Häufigkeit                 Dauer in Minuten
08.10.15     Problem A      Projekt A         5                             45
08.10.15     Problem B      Projekt A         7                             75
08.10.15     Problem A      Projekt B         1                             25

etc.

ebs17

#6
Etwa so könnte es gehen:
SELECT
   A.StMonat,
   A.Störung,
   A.Projekt,
   A.AnzH,
   A.SumDauer
FROM
   (
      SELECT
         Year(Datum) * 100 + Month(Datum) AS StMonat,
         Störung,
         Projekt,
         COUNT(Häufigkeit) AS AnzH,
         SUM(Dauer) AS SumDauer
      FROM
         tbl_Stoerungen
      GROUP BY
         Year(Datum) * 100 + Month(Datum),
         Störung,
         Projekt
   ) AS A
WHERE
   A.SumDauer IN
      (
         SELECT TOP 5
            B.SumDauer
         FROM
            (
               SELECT
                  Year(Datum) * 100 + Month(Datum) AS StMonat,
                  Störung,
                  Projekt,
                  COUNT(Häufigkeit) AS AnzH,
                  SUM(Dauer) AS SumDauer
               FROM
                  tbl_Stoerungen
               GROUP BY
                  Year(Datum) * 100 + Month(Datum),
                  Störung,
                  Projekt
            ) AS B
         WHERE
            B.StMonat = A.StMonat
               AND
            B.Störung = A.Störung
               AND
            B.Projekt = A.Projekt
         ORDER BY
            B.SumDauer DESC)
Mit freundlichem Glück Auf!

Eberhard