Announcement

Collapse
No announcement yet.

Wert je Tag ermitteln per SQL

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Wert je Tag ermitteln per SQL

    Hallo zusammen,

    ich bin neu hier im Forum und arbeite erst seit kürzester Zeit mit SQL im Rahmen von MS Visual Studio 2005. Bislang konnte ich alle Aufgabenstellungen selbst lösen, aber folgende Aufgabenstellung bekomme ich irgendwie nicht in den Griff:

    Ich möchte die Kapazität einer Maschine ausrechnen und die tatsächliche Auslastung gegenüberstellen. Letzteres ist mir auch gelungen. Nur die Kapazität bekomme ich einfach nicht ermittelt:

    Der Maschine ist ein Wochenmodell und ein Tagesmodell zugeordnet. In der Tabelle Wochenmodell ist auch ein Feld KW angegeben. Hierfür ebenfalls ein Start. und ein Enddatum der KW. Aber eben kein Tagesdatum. Die Kapazitäten der Maschine hingegen sind je Tag angegeben und können natürlich variieren. Ich kann also sehen, wann die Kalenderwoche startet, auch z.B. welche Sollzeit je Tag für jeweils Mo-So z.B. für KW 46 hinterlegt. Im Prinzip müsste ich jetzt diese Sollzeit einem Tagesdatum zuordnen. Aber wie bekomme och das hin!? :-(

    Kann vielleicht mit diesen Informationen jemand etwas anfangen und mir einen Hinweis geben? Benötigt jemand mehr Informationen?

    Viele Grüße und besten Dank!

    Newbee

  • #2
    Vorab, nicht gefragt, aber gern gesagt:
    2005 ist etwas veraltet, wenn Du "fancy" SQL Statements absetzen möchtest, bei denen nicht der Client alles zu Fuß ausrechnet, würde ich Dir gerade bei MS SQL Server die aktuellste Version empfehlen, nicht 2005.

    Zu Deinem Anliegen.
    SQL arbeitet Mengenorientiert, Mengen werden verknüpft (gejoined), gefiltert, aggregiert. Mengen kann man zusammenfassen, subrahieren usw.
    Alle diese Operationen basieren auf der Existenz oder Nicht Existenz von zu vergleichenden Wertepaaren in unterschiedlichen Datenmengen (~Tabellen*). Wenn du eine Woche mit einem Tag vergleichen willst, liegt es praktischerweise auf der Hand, dass es keine konkreten Wertepaare gibt. Obwohl man natürlich weiß, dass in einer spezifischen KW, genau die spezifischen Tage drinstecken, die man irgendwo zu einer anderen Tabelle joinen will.

    Dieses Problem gibt es in großer Vielfalt in SQL. Es wird in der Regel durch "Mappings", also Datenwerte, -Paar, -Tripple,.. gelöst, die fehlende Joins "nachliefern".
    Also z.B. in Deinem Fall eine Tabelle, die konkrete KW auflistet gegen (noch konkretere) Datumswerte. Mit Hilfe einer solchen Tabelle, sagen wir KWDatum, kannst du ohne Probleme viele solcher Anforderungen lösen. Sie muss nicht mal spezifisch für den einen Fall für Tagesangaben sein, sondern liefert die Aufschlüsselung von KW zu Datum ganz allgemein. Du joinst sie zwischen Deine KW Tabelle und Deine Tagestabelle und hast alles was Du brauchst.

    Kleiner Schönheitsfehler einer KW ist natürlich, dass sie nicht nur bezüglich der Tage ungenauer ist, sondern für sich genommen auch kein Jahr liefert. Das muss man nach Bedarf anpassen / ergänzen. Auch hier am einfachsten das Jahr mit in die Tabelle aufnehmen.

    Wenn Dir dieser Sachverhalt klar ist, kommst Du vielleicht zu dem Punkt, wo Du feststellst, das man eine ganze Menge Daten anlegen muss, um für Vergangenheit und Zukunft alle Tage mit KW abgleichen zu können. An der Stelle kann man dann auch dynamisch werden und statt einer statischen Mappingtabelle mit "virtuellen" Daten operieren. Also Jahresangaben, KW, Tagesdaten die während sie abgefragt werden, erst berechnet werden, je nach Bedarf.

    Hierzu noch ein ganz allgemeiner und wichtiger Tipp für das Arbeiten mit Datumswerten. SQL bietet ej nach Hersteller / Dialekt eine große Fülle von Datumsfunktionen / Arithmetik. Damit ist es ganz einfach Tage, Wochen, Monate, .. Stunden, Minuten, Sekunden zu addieren, zu subtrahieren usw. Voraussetzung dafür ist strikte Einhaltung von Datumstypen! Datumswerte in String sind Schrott, außer das Format ist 100% bekannt, sodaß eine Umrechnung in Datumstypen jederzeit Möglich ist.

    Also versuch mal, wenn Du ein konkretes Problem hast, poste dei Tabellendefinition und die Abfragen hier.

    * Eine Tabelle steht dabei entweder für eine tatsächliche Tabelle oder ein beliebiges Selectstatement, dessen Ergebnis ebenfalls wieder als Tabelle / Datenmenge betrachtet werden kann.
    Gruß, defo

    Comment

    Working...
    X