Summe Betriebsstunden eines Jahres

Horst-Erich

Benutzer
Beiträge
5
Hallo,

folgendes Problem:

Die Tabelle Betriebsstunden enthält "Inventarnummer", "Datum" und "Stunden".
Ich möchte die Gesamtstunden eines Jahres eines Standortes summiert haben.
Mit: "SELECT MAX(Stunden) - MIN(Stunden) AS gesamt FROM Betriebsstunden
WHERE Inventarnummer LIKE '201%' AND Datum BETWEEN @Date1 AND @Date2
GROUP BY Inventarnummer"
bekomme ich die einzelnen (korrekten) Werte pro Maschine pro Jahr. Wie kann ich diese nun noch
in der Abfrage summieren? Meine Versuche enden alle mit diversen Fehlermeldungen...

Würde mich über Vorschläge freuen!
 
Werbung:
In Deinem Select fehlt in der Select-Liste offensichtlich noch die Inventarnummer.

Zu Deiner Frage:

"select sum(gesamt) from (hier dein bisheriges select) foo" liefert Dir das, was Du suchst.
 
Normalerweise würde ich sagen
Code:
SELECT datepart(yyyy,datum) AS jahr,sum(stunden) AS stunden
FROM betriebsstunden
GROUP BY datepart(yyyy,datum)
Ich verstehe aber deinen Ansatz nicht, warum max(stunden - min(stunden)? Warum gruppierst du nach der Inventarnummer? Wie unterscheide ich Standorte?
 
warum max(stunden - min(stunden)?

er speichert vermutlich immer den aktuellen Stand und muß daher die Differenz ermitteln, um für einen bestimmten Zeitraum (Jahr, $whatever) zu ermitteln, wie viele Stunden das Teil lief. Die Inventarnummer wiederum gibt ihm (vermutlich) einen Hinweis auf den Standort - falls er den braucht.
 
@ukulele: Deine Variante summiert mir im laufe des Jahres alle Zwischenablesungen auf, also keine wirklichen Laufzeiten der Maschine.

@akretschmer : "SELECT SUM(gesamt) FROM (SELECT MAX(Stunden)-MIN(Stunden)) AS gesamt FROM Betriebsstunden WHERE Inventarnummer LIKE '201%' AND Datum BETWEEN '2016/01/01' AND '2016/12/31' "
gibt eine Fehlermeldung. Falsche Klammersetzung?
 
Nach privater Nachfrage / Bitte um Erklärung:

Code:
test=*# select * from horst_erich ;
 inv_nr |  datum  | stunden
--------+------------+---------
  1 | 2016-02-02 |  2000
  1 | 2016-12-02 |  2100
  1 | 2017-01-01 |  2150
  1 | 2017-12-31 |  3150
  2 | 2016-02-02 |  20000
  2 | 2017-01-01 |  21000
  2 | 2017-10-31 |  23000
(7 Zeilen)

test=*# select inv_nr, max(stunden)-min(stunden) as laufzeit_2017 from horst_erich where datum between '2017-01-01' and '2017-12-31' group by inv_nr;
 inv_nr | laufzeit_2017
--------+---------------
  1 |  1000
  2 |  2000
(2 Zeilen)

test=*# select sum(laufzeit_2017) as summe from (select inv_nr, max(stunden)-min(stunden) as laufzeit_2017 from horst_erich where datum between '2017-01-01' and '2017-12-31' group by inv_nr) bla;
 summe
-------
  3000
(1 Zeile)

test=*#

Nun klarer?
 
Ja, vielen Dank!
Die korrekte Syntax der Abfrage habe ich hin bekommen.
Das Problem liegt in der Abfrage selber. SUM(Max - MIN) von mehreren Maschinen eines Standortes liefert zum Beispiel SUM(Max(Maschine X)-MIN(Maschine Y). Macht aber keinen Sinn mit Werten von verschiedenen Maschinen zu rechnen.
Muß mir also überlegen, in welcher Form die Werte abgespeichert werden. Ich wollte nur nicht ca. 30 Tabellen für jeden Standort anlegen. Andererseits muß ich wohl für jede Maschine eine eigene Abfrage erstellen, um korrekte Werte zu erhalten. Das richtige Datenmodell - learn more...! :)
 
Blos nicht eine Tabelle pro Maschine, das ist Quatsch.

Du suchst
Code:
SELECT standort,maschine,max()-min()
FROM tabelle
WHERE ...
GROUP BY standort,maschine
 
Werbung:
Zurück
Oben