DB -> Queryproblem

  • Hallo!

    Das ist jetzt zwar keine programmierfrage, aber ich denke es passt am besten in dieses forum:

    Ich verwende MySQL 4.0.x und habe ein Query in der Form:

    SQL
    SELECT OpenPrice,ClosePrice,DATE_FORMAT(CaptureDate,  '%Y-%m'  )  AS CaptureDate, sum(Volumen) AS Volumen 
    FROM abc 
    WHERE CaptureDate>='2004-05-20 00:00:00' AND CaptureDate<='2005-05-20 23:59:59' 
    GROUP BY CaptureDate 
    ORDER BY CaptureDate

    Wenn ich das query jetzt auf folgende Daten anwende

    Code
    Volumen, OpenPrice, ClosePrice, CaptureDate
     10 238.5	  239.05	  2005-05-04 00:00:00
    12 238.1 	 200.01	  2005-05-03 00:00:00
    22 239.5 	237.55 	2005-05-02 00:00:0

    dann bekomme ich als ergebnis

    Code
    44 239.5 	237.55 	2005-05


    Ich möchte aber

    Code
    44 238.5 239.05 2005-05

    Kann mir da jemand helfen? MySQL 4.0 unterstützt leider keine Subqueries...

  • Ich weiß nicht genau, welche Lösung du haben möchtest, aber mir sind ein paar Sachen aufgefallen:

    • es müssen allen Spalten gruppiert werden (bis auf die, auf die Aggregatfunktionen angewendet werden)
    • verwende evt. BETWEEN ... AND ...
    • evt. hilft dir eine weitere Aggregatfunktion wie MIN(OpenPrice) weiter

    mfG Fup

  • Zitat von Fup

    Ich weiß nicht genau, welche Lösung du haben möchtest, aber mir sind ein paar Sachen aufgefallen:

    • es müssen allen Spalten gruppiert werden (bis auf die, auf die Aggregatfunktionen angewendet werden)
    • verwende evt. BETWEEN ... AND ...
    • evt. hilft dir eine weitere Aggregatfunktion wie MIN(OpenPrice) weiter

    ad 1.) MySQL ist da nicht so streng ;)
    ad 2.) das hilft mir auch nicht weiter, da es nur zeilen rausfiltert. ich müsste aber die gruppierung steuern.
    ad 3.) das hilft leider nicht, da ich den letzten satz (kann also max, min oder auch irgendwas dazwischen sein) brauche.

  • ich würd das ganze einfach auf 2 queries aufteilen - du hast ja auch 2 unterschiedliche fragestellungen (wenn ich's richtig verstanden hab):

    1. das volumen aller posten im zeitraum xy
    2. open/close price des (zeitmäßig) ersten postens im zeitraum xy

    bei deinem bsp. ist das problem, dass du gruppierst und order by erst nach der gruppierung wirken kann (es würde die gruppen (wenn es meherere davon gäbe)ordnen) - mysql spuckt dir dadurch, dass du nicht aggregierst, einfach die attribut-werte vom letzten zutreffenden datensatz aus.

  • Zitat von seiti

    ich würd das ganze einfach auf 2 queries aufteilen - du hast ja auch 2 unterschiedliche fragestellungen (wenn ich's richtig verstanden hab):

    1. das volumen aller posten im zeitraum xy
    2. open/close price des (zeitmäßig) ersten postens im zeitraum xy

    bei deinem bsp. ist das problem, dass du gruppierst und order by erst nach der gruppierung wirken kann (es würde die gruppen (wenn es meherere davon gäbe)ordnen) - mysql spuckt dir dadurch, dass du nicht aggregierst, einfach die attribut-werte vom letzten zutreffenden datensatz aus.

    deine vermutung sehe ich auch so. werde dann wohl deinen vorschlag mit den 2 queries implementieren.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!