Zum Inhalt springen

Prophet_of_Kruphix

Mitglieder
  • Gesamte Inhalte

    7
  • Benutzer seit

  • Letzter Besuch

Beiträge von Prophet_of_Kruphix

  1. vor einer Stunde schrieb Whiz-zarD:

    Die Stunden werden summiert. Die Unterabfrage:

    
    SELECT     Laufzeit.MaschineID, SUM(Laufzeit.Stunden) AS Stunden
    FROM       Laufzeit
               INNER JOIN Maschine ON Maschine.MaschineID = Laufzeit.MaschineID
    WHERE      Laufzeit.Datum > Maschine.DatumLetzteWartung
    GROUP BY   Laufzeit.MaschineID

    Gibt als Ergebnis die summierten Stunden pro Maschine, wo das Datum größer als das Datum der letzten Wartung ist.

    Beispiel:

    Folgende Daten sind gegeben:

    
    Laufzeit:
    MaschineID  Datum       Laufzeit
    1           31.10.2019  5
    1           20.11.2019  4
    1           21.11.2019  8
    
    
    Maschine:
    MaschineID  MaschineTypID   DatumLetzteWartung
    1           1               01.11.2019
    
    

    Die Abfrage würde nun folgendes Ergebnis liefern:

    
    MaschineID  Stunden
    1           12

    Der Datensatz mit den 5 Stunden wird außer Acht gelassen, weil das Datum kleiner als das Datum der letzten Wartung ist und somit keine Rolle mehr spielt.

     

    Die Aufgabe war, dass man herausfinden soll, welche Maschine gewartet werden muss, wenn sie noch 100 Stunden benutzt wird. Also muss man auf die derzeitige Nutzung 100 Stunden drauf addieren und diesem Wert den Wartungsintervall vergleichen.

    Ah ich sehe grad ich hab mich verlesen. Dachte du machst dein SUM nur im äußeren WHERE.
    Bei dem SUM im JOIN wird die Stunden Property von Laufzeit "Überschrieben", so dass in jedem LaufzeitObjekt die Stunden Property gleich der Gesamtzahl ist oder?
     

  2. vor 58 Minuten schrieb Whiz-zarD:
    
    SELECT  Kunde.*, Maschine.MaschineID, Laufzeit.Stunden
    FROM    Kunde
            INNER JOIN Maschine ON Maschine.KundeID = Kunde.KundeID
            INNER JOIN MaschinenTyp ON MaschinenTyp.MaschineTypID = Maschine.MaschineTypID
            INNER JOIN ( SELECT     Laufzeit.MaschineID, SUM(Laufzeit.Stunden) AS Stunden
                         FROM       Laufzeit
                                    INNER JOIN Maschine ON Maschine.MaschineID = Laufzeit.MaschineID
                         WHERE      Laufzeit.Datum > Maschine.DatumLetzteWartung
                         GROUP BY   Laufzeit.MaschineID
                       ) Laufzeit ON Laufzeit.MaschineID = Maschine.MaschineID
    WHERE   Laufzeit.Stunden + 100 > MaschinenTyp.WartungsintervallInStunden

     

    DU musst die Stunden Summieren, es sind immer nur die Anzahl Stunden pro Datum. dein Lösungsansatz ist so also falsch. warum machst du den Sum im Where aber im Select nicht? @Whi-zarD

  3. Also Die Laufzeit hat ein Datum mit im Table. Es wird also immer die Stunden gespeichert die die Maschine an einem bestimmten Tag gelaufen ist, ansonsten macht das Feld keinen sinn und es wäre keine 3 Normalform.
     

    und zu 

    vor einer Stunde schrieb Tobeje:

    Bist du dir da sicher? In der SQL Syntax(Auszug) von der IHK gibt es kein "JOIN" befehl sondern nur die Standard Join befehle (INNER JOIN, LEFT JOIN, RIGHT JOIN, FULL JOIN). Ich denke mal man sollte schon die Syntax von der IHK verwenden.

    Das mit der Summe der Stunden ist halt auch wieder Definition Sache was oder wie in der Datenbank abgespeichert ist und das ist leider nicht beschrieben. Woher soll man wissen ob es die Summe alle Laufzeiten nach der Letzten Wartung ist? 

    Ein JOIN ist das gleiche wie ein INNER JOIN.

    Die Lösung ist (bis auf das ich das INNER bei den Joins weggelassen hab) so von der IHK vorgegeben.

  4. Sicher richtige Lösung aus Quellen: 

    SELECT K. KundeID, K.KundeFirma, K.KundeAdresse, M.MaschineId,

    (SELECT SUM(L.Stunden)

    FROM Laufzeit AS L

    WHERE L.MaschineID = M.MaschineID AND L.Datum > M.DatumLetzteWartung ) AS Laufzeit

    FROM Kunde AS K JOIN Maschine AS M 

    ON K.KundeID = M.KundeID

    JOIN Maschinentyp AS MT 

    ON M.MaschineTypID = MT.MaschineTypID

    WHERE (SELECT SUM (L.Stunden)

    FROM Laufzeit AS L

    WHERE L.MaschineID = M.MaschineID AND L.Datum > M.DatumLetzteWartung ) +100 > MT.WartungsintervallInStunedn;

     

     

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...