none
Umwandeln von Zeitspannen für Kapazitätsplanung/Material RRS feed

  • Frage

  • Hallo zusammen!

    Ich versuche eben die Welt von MS Access 2007 zu verlassen und mit auf MS SQL 2012 umzustellen.

    Soweit komme ich mit SQL ja zurecht - derzeit hänge ich aber bei einem Problem - wie ich Zeitspannen (von-bis - in Tagen) in einzelne Tage umwandeln kann.

    Hintergrund - ich möchte Kapazitätsplanungen damit hochrechnen - was ich an Material verbrauchen werde etc.

    Also mein Table schaut wie folgt aus:

    Task - StartDatum - EndDatum - Material - Einheiten

    Arbeit1 - 2013-01-20 - 2013-01-29 - Steine - 30

    Arbeit2 - 2013-01-25 - 2013-01-31 - Steine - 28

    Daraus folgt -

    Arbeit1 - 3 Steine /pro Tag

    Arbeit2 - 4 Steine /pro Tag

    Am 2013-01-27 - brauche ich somit 7 Steine

    Mein Ansatz war ein Grid View zu bekommen - hierzu müsste ich aber die Daten aus der Tabelle - in einzelne Tagesdaten umwandeln.

    Sprich:

    Arbeit1 - 2013-01-20 - Steine 3

    Arbeit1 - 2013-01-21 - Steine 3

    etc.

    Vielleicht denke ich zu kompliziert... eine Idee wie ich das umsetzten kann?

    Zeitspannen konvertieren .. und in eine Tabelle schreiben - so würde ich es mit VB in Access machen...

    Da gibts ne bessere Lösung, oder?

    Danke

    Björn

    Learning by doing...

    Samstag, 2. Februar 2013 15:49

Alle Antworten

  • Die Differenz in Tagen kannst du in T-SQL mittels DATEDIFF() berechenen und genause deinen Durchschnitt.
    Samstag, 2. Februar 2013 16:12
    Moderator
  • Danke für die Hilfe. Also mit Datediff() bekomme ich meine Zeit - und somit die Einheiten pro Tag. Das hab ich inzwischen in einer Abfrage drinnen.

    Nur - soll ich nun für jeden Record - und einem Tag mit Einheit x - eine neue Tabelle schreiben - und dann darüber das Grid laufen lassen. Oder gibts da eine elegante Lösung wie ich an meine TagesWerte im Total kommen kann?

    Ich hab da etwa 5.000-10.000 Datensätze die sich alle paar Tage ändern - Zeitspannen von bis zu 2 Jahren (pro record). Wenn ich da eine Tabelle mit Daten fülle... kommen schnell mal paar Millionen Datensätze zusammen.

    Denke das kostet irre viel Zeit das so umzuwandeln. Oder etwa nicht?

    Oder soll da lieber eine Abfrage in jeden Datensatz schauen - ob das in das gewünschte Zeitfenster fällt - und dann den Bedarf von Material X am Tag Y rausrechnet?

    Ich würde am liebsten so etwas wie ein GridView bekommen - weiß aber nicht wo ich da wirklich ansetzten soll...


    Learning by doing...

    Samstag, 2. Februar 2013 16:23
  • Eine Tabelle pro Tag ist im Normalfall kein gute Lösung. Auch sind deine Datenmengen im Normalfall kein Problem. Sollte die Berechnung der Tag ein Problem sein, so kannst du auf persistente berechete Spalten zurückgreifen. Allerdings als quasi letztes Mittel:

    USE tempdb;
    
    CREATE TABLE Tasks
    (  
      TaskName NVARCHAR(255) NOT NULL ,
      StartDatum DATE NOT NULL ,
      EndDatum DATE NOT NULL ,
      Material NVARCHAR(255) NOT NULL ,
      Einheiten INT NOT NULL ,
      TaskDauer AS DATEDIFF(DAY, StartDatum, EndDatum) PERSISTED NOT NULL 
    );
    
    INSERT INTO Tasks VALUES 
    	( 'Arbeit1' , '20130201', '20130203', 'Steine', 30 );
    
    SELECT	*
    FROM	Tasks;


    Sonntag, 3. Februar 2013 12:24
    Moderator