Announcement

Collapse
No announcement yet.

Verdichten von Daten - Group By Problem

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

  • Verdichten von Daten - Group By Problem

    Hallo zusammen,

    ich bin relativ neu im Bereich SQL und scheitere zur Zeit daran meine Daten zu verdichten. Konkret geht es um Aktienkurse. Folgende Daten liegen zu Grunde:

    date | open | high | low | close
    ---------------------------------------
    2010-01-15, 6.88, 6.99, 6.71, 6.75
    2010-01-14, 6.92, 7.01, 6.85, 6.90
    2010-01-13, 6.62, 6.86, 6.57, 6.78
    2010-01-12, 6.75, 6.82, 6.54, 6.60
    2010-01-11, 6.78, 6.92, 6.76, 6.80
    2010-01-08, 7.01, 7.03, 6.68, 6.72
    2010-01-07, 7.55, 7.55, 7.00, 7.07
    2010-01-06, 7.77, 7.84, 7.68, 7.71
    2010-01-05, 7.89, 7.89, 7.67, 7.72
    2010-01-04, 7.71, 7.91, 7.71, 7.84

    Ich würde nun gerne aus den Tagesdaten Wochendaten erzeugen. Heisst, ich möchte folgendes Ergebnis:

    startDate | endDate | open | high | low | close
    ----------------------------------------------------------
    2010-01-04, 2010-01-08, 7.71, 7.91, 6.68, 6.72
    2010-01-11, 2010-01-15, 6.78, 6.99, 6.54, 6.75

    Mit folgender Abfrage bekomme ich zumindest schon mal startDate, endDate, high und low:

    SELECT MIN(date), MAX(date), MAX(high), MIN(low)
    FROM table
    GROUP BY STRFTIME('%Y-%W',date)

    Aber es will mir einfach nicht gelingen, noch die open- und close-Werte in die Abfrage reinzubekommen. open ist dabei immer der open-Wert des startDate und close ist immer der close-Wert des endDate. Vermutlich lässt sich das durch einen geschickten Self-Join hinbekommen, aber ich weiss nicht wie...

    Weiss jemand rat? Ich hoffe, ich habe einigermaßen verständlich dargestellt, was ich vor habe.

    Vielen Dank schon mal im Vorraus.

    PS: Ich verwendet SQLite.

  • #2
    Hallo Rast81

    ich arbeite mit dem MSSQL-Server und weiß jetzt nicht wie man die Kalenderwoche ermittelt, aber das kriegst du bestimmt auch raus.


    SELECT MIN(t.date), MAX(t.date), MAX(t.high), MIN(t.low) FROM (SELECT * FROM table) AS t
    GROUP BY (Abfrage für Kalenderwoche)

    Hab den Code-Schnipsel nicht getestet, aber so müsste es Ansatzweise funktionieren.

    Comment


    • #3
      Ich hab es noch mal in MSSQL probiert.

      Code:
      SELECT	MIN([date]) AS StartDate, MAX([date]) AS EndDate,
      		MAX([high]) AS High, MIN([low]) AS Low,
      		MIN([open]) AS 'Open', MAX([close]) AS 'Close',
      		dbo.fn_ISOWeek(datum) AS KW
      FROM tabbörse
      GROUP BY dbo.fn_ISOWeek(datum)
      Die Funktionen für das Ermitteln der Kalenderwochen findest du unter folgendem Link.

      http://www.dotnetnukeblog.de/Mit+SQL...Ermittlen.aspx

      Comment

      Working...
      X