Announcement

Collapse
No announcement yet.

Datumsangaben in einem Datumsrange erzeugen

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

  • Datumsangaben in einem Datumsrange erzeugen

    Hallo zusammen

    Ich habe Tabelle mit folgendem Inhalt:
    [objectname] [datetime] [wert]

    Nun will ich diese auf einem Chart anzeigen. Dafür Selecte ich das gewünschte Objekt und die gewünschte Zeitspanne und erhalte so jeweils die Werte für die X (Datum) und Y (Wert) Achse. Da nun nicht alle Objekte jedem Tag einen Wert "generieren", überspringt der Chart einzelne Tage an welchen keine Werte vorhanden sind was nur zu erkennen ist, wenn man die Daten abliest.

    Ich will nun auch die Tage darstellen, an welchen die Objekte nicht gelaufen sind. Dafür kenne ich die Möglichkeit einer zweiten Tabelle welche alle Datumsinformationen (Stil 2011/1/1, 2011/1/2, 2011/1/3...) beinhaltet mit der ich einen JOIN auf das datetime mache - dann würde ich jeweils NULL kriegen in den Feldern die für das Datum keine Werte ausweisen. Alternativ kann ich das auch programmtechnisch lösen.

    Nun meine Frage:
    Gibt es dafür auch direkt eine Lösung in SQL? Sprich ein Select, welches zwischen 2 Datumsangaben alle verfügbaren Daten liefert?

    Beispiel:
    select daterange(2011-01-01, 2011-02-01)
    2011-01-01
    2011-01-02
    2011-01-03
    ...
    2011-02-01

    Gruss
    Joel

  • #2
    mit einer WHERE-Klausel:

    ...
    WHERE Datetime BETWEEN '2011-01-01' AND '2011-02-01'

    Comment


    • #3
      Und wie soll das gehen?

      Das steht in der Tabelle:

      Objekt - Datum - Wert
      A - 2011-1-1 - 10
      A - 2011-1-3 - 30

      Das wäre das benötigte Resultat:

      A - 2011-1-1 - 10
      A - 2011-1-2 - NULL
      A - 2011-1-3 - 30

      Resp. darf beim Eintrag vom 2011-1-2 auch NULL als Objektname sein. Also:
      NULL - 2011-1-2 - NULL

      Comment


      • #4
        Beim SQL-Server könnte man sich eine UDF (UserDefined Function) schreiben und dann würde zB. ein Aufruf in der Form ...

        select * from dbo.daterange(2011-01-01, 2011-02-01)

        ... genau das liefern was du möchtest. Allerdings ist das datenbankspezifisch und wir kennen deine Datenbank nicht.

        bye,
        Helmut

        Comment


        • #5
          Whops, stimmt. Ich bin mit MSSQL Server 2008 unterwegs! Würde das dann mittels einer Iteration durch dateadd() sein?

          Weil theoretisch könnte man ja mit datediff die Anzahl Tage (y) zählen und anschliessend jeweils mit dateadd(y..x) die Daten beziehen.

          Comment

          Working...
          X