| | | | |
| | |
| PHP Code Flüsterer Registriert seit: 21.08.2005 Beiträge: 4682 PHP-Kenntnisse: Fortgeschritten | |
| | |
| Erfahrener Benutzer Registriert seit: 17.03.2010
Beiträge: 1.833
PHP-Kenntnisse: Fortgeschritten ![]() ![]() | Hi. Deine Syntax ist auch nicht korrekt. Sicher das Du nichts vergessen und/oder "falsch" verschachtelt hast http://dev.mysql.com/doc/refman/5.1/...trictions.html mfg Wolf29
__________________ while (!asleep()) sheep++; Unterschätze nie jemanden der einen Schritt zurück geht! Er könnte Anlauf nehmen. |
| | |
| | |
| Neuer Benutzer Registriert seit: 10.10.2011
Beiträge: 13
PHP-Kenntnisse: Anfänger ![]() | Hi, danke für die schnellen Antworten. Mein Ziel ist ein View, der mir meine vorhandene Abfrage in eine neue Tabelle schreibt. Dabei soll eine Rollierung angewandt werden, so dass man immer Jahresscheiben betrachtet. Dazu benutze ich diesen Code: Code:
SELECT
n.Date,
((((n.Price + o.Price) - (n.Price*2))/n.Price)) * ((SUM(op.Price * op.MCap) / SUM(np.Price * op.MCap)) -1) AS xy,
((((n.Price + o.Price) - (n.Price*2))/n.Price)) AS x,
((SUM(op.Price * op.MCap) / SUM(np.Price * op.MCap)) -1) AS y,
POW(((SUM(op.Price * op.MCap) / SUM(np.Price * op.MCap)) -1),2) AS y2,
FOR-TO-VARIABLE as Number
FROM
equities n
INNER JOIN equities o
ON n.ID=o.ID
AND n.Date=o.Date + INTERVAL 1 DAY
AND n.Date > "2010-10-13" - FOR-TO-VARIABLE
AND n.Date < "2011-10-13" - FOR-TO-VARIABLE
INNER JOIN portfolio np
ON n.Date=np.Date
INNER JOIN portfolio op
ON op.ID=np.ID
AND np.Date=op.Date + INTERVAL 1 DAY
AND n.Date > "2010-10-13" - FOR-TO-VARIABLE
AND n.Date <"2011-10-13" - FOR-TO-VARIABLE
GROUP BY
n.Date DESC,
n.ID ASC
Funktioniert denn der Loop in einer Prozedur in einem View? Oder würdet ihr vorschlagen, das anders zu lösen? |
| | |
| | |
| Erfahrener Benutzer Registriert seit: 19.06.2009
Beiträge: 837
PHP-Kenntnisse: Fortgeschritten ![]() ![]() ![]() ![]() ![]() | Ich bin mir eigentlich ziemlich sicher, dass es bessere Ansätze gibt, die ohne diese Schleife klar kommen. Wenn Du wirklich über alle Daten iterieren willst, dann wäre das ganze als simpler Join realisierbar. Ich tue mich allerdings mit Deiner Beispielquery ein wenig schwer. Du sagst, Du willst über Daten iterieren, hast aber eine Join-Bedingung nach dem Muster "Datum<NochnDatum-Laufvariable". Wenn Du über das Datum iterierst, dann ist doch auch die Laufvariable ein Datum und damit würden Deine <> Vergleiche jeweils Äpfel (Daten) mit Birnen (Datenintervalle) vergleichen. Irgendwas stimmt da noch nicht. Bitte hol noch mal ein bißchen weiter aus und beschreibe und, was FOR-TO-VARIABLE für ein Wert ist und wofür er letztendlich Verwendung finden soll. Gruß Jens |
| | |
| | |
| Neuer Benutzer Registriert seit: 10.10.2011
Beiträge: 13
PHP-Kenntnisse: Anfänger ![]() | Hallo Jens, vielen Dank für Deine Antwort. Mein Ziel ist eine rollierende Betaberechnung (http://de.wikipedia.org/wiki/Betafaktor) mittels MySQL durchzuführen. Ich habe ein Tabelle mit den Werten der zu überprüfenden Aktie (equities) und eine Tabelle mit anderen Aktien (portfolio) Letzteres stellt das Marktportfolio dar und ist die Grundlage, einen Marktindex zu berechnen. Die Query oben berechnet mir nun als Ausgangsbasis die Daten, um das Beta vom 13.10.2010 bis 13.10.2011 zu berechnen. Ich möchte nun eine Query/View, die genau das für alle Jahresscheiben tut, also auch vom 12.10.2010 bis 12.10.2011, 11.10.2010 bis 11.10.2011 usw. Deswegen war meine Idee, das mittels for-to Schleife zu lösen und jeweils die Datumsgrenzwerte um eins zu reduzieren, um so die Jahresscheiben zu berechnen. Genau das sollte die Variable "FOR-TO-VARIABLE" machen, die die Laufvariable der Schleife ist. Falls es eine Möglichkeit gibt, das ohne Schleife durchzuführen, wäre mir das auch lieber, ich habe nur keine Lösung dafür erkennen können. Hast Du eine Idee, wie man das machen könnte? Viele Grüße Aldaris Geändert von Aldaris (07.11.2011 um 16:14 Uhr). |
| | |
| | |
| Erfahrener Benutzer Registriert seit: 19.06.2009
Beiträge: 837
PHP-Kenntnisse: Fortgeschritten ![]() ![]() ![]() ![]() ![]() | Och Du immer mit Deinen Statistikfragen - das Fach hab ich schon im Studium nicht leiden können... Bitte geh noch mal einen Schritt weiter und poste dazu, wie Du den Betafaktor für eine Jahresscheibe aus den Ergebnissen der Query bestimmst. Ich müsste da jetzt nämlich echt auch nachschlagen und ein bißchen Zeit rein stecken. Deinen Worten entnehme ich, dass Du die passende Formel schon rum liegen hast? Auf Basis dessen, was ich bisher sehe, ist wahrscheinlich eine Query möglich, die direkt das gewünschte Endergebnis aus der Datenbank ermittelt. Einzig mir fehlt die passende Gruppierfunktion um das Gesamtergebnis zu ermitteln. Die Rohdaten selbst lassen sich - wahrscheinlich - wie folgt ermitteln: Code: SELECT
dt.Date,
dt.scheibe,
s.xy,
s.x,
s.y,
s.y2
FROM
(SELECT @i:=0) i /* Initialisierung der Laufvariable */
CROSS JOIN
(
SELECT
@i:=@i+1 AS scheibe,
d.Date
FROM
equities d
GROUP BY
d.Date
) dt /* Daten */
INNER JOIN
( /* Statistikdaten */
SELECT
n.Date,
((((n.Price + o.Price) - (n.Price*2))/n.Price)) * ((SUM(op.Price * op.MCap) / SUM(np.Price * op.MCap)) -1) AS xy,
((((n.Price + o.Price) - (n.Price*2))/n.Price)) AS x,
((SUM(op.Price * op.MCap) / SUM(np.Price * op.MCap)) -1) AS y,
POW(((SUM(op.Price * op.MCap) / SUM(np.Price * op.MCap)) -1),2) AS y2
FROM
equities n
INNER JOIN equities o /* Vortagsstand Aktie*/
ON n.ID=o.ID
AND n.Date=o.Date + INTERVAL 1 DAY
INNER JOIN portfolio np /* Portofolio am Tag n */
ON n.Date=np.Date
INNER JOIN portfolio op /* Vortagsstand Portofolio-Eintrag */
ON op.ID=np.ID
AND np.Date=op.Date + INTERVAL 1 DAY
GROUP BY
n.Date,
n.ID,
o.Price
) s
ON s.Date BETWEEN dt.Date AND dt.Date - INTERVAL 1 YEAR
Gruß Jens |
| | |
| | |
| Neuer Benutzer Registriert seit: 10.10.2011
Beiträge: 13
PHP-Kenntnisse: Anfänger ![]() | Hi Jens, vielen Dank für den Code. Ich dachte mir, dass ich mit den Statistiksachen aus der Reihe tanze, um ein wenig Abwechslung reinzubringen Mit PHP hat die Thematik nicht viel zu tun, da es eine reine MySQL Umsetzung ist. Ich war nur auf der Suche nach einem MySQL Forum und bin dabei auf dieses ziemlich aktive hier gestoßen. Ich hoffe, dass das kein Problem ist .Ich habe mir das gestern und heute angesehen und versucht zu verstehen, wie die Berechnung funktioniert. Im groben und ganzen verstehe ich, worauf Du hinaus möchtest. Leider liefert der Code aber kein Ergebnis und ich kann nicht nachvollziehen, warum. Das Beta wird wie folgt berechnet (b = Cov(X,Y)/Var(Y)): Code: (COUNT(s.xy) * SUM(s.xy)) - (SUM(s.x) * SUM(s.y)))/((COUNT(s.xy) * SUM(s.y2)) - POW(s.y,2) Aus den entsprechenden vorgegebenen Spalten (siehe Dein Code) müsste man mit einem INNER JOIN arbeiten, um dann das gewünschte Ergebnis zu bekommen. Ich kann es wie gesagt, nur momentan nicht testen, weil der Code kein Ergebnis liefert. |
| | |
| | |
| Neuer Benutzer Registriert seit: 10.10.2011
Beiträge: 13
PHP-Kenntnisse: Anfänger ![]() | Hi, ich habe den Fehler im Code gefunden, beim Intervall muss der kleinere Datumswert vor dem größeren stehen: Code:
ON s.Date BETWEEN dt.Date - INTERVAL 1 YEAR AND dt.Date
Zum Beta kommt man nun wie folgt: Code:
SELECT
dt.Date,
((COUNT(s.xy) * SUM(s.xy)) - (SUM(s.x) * SUM(s.y)))/((COUNT(s.xy) * SUM(s.y2)) - POW(s.y,2))
FROM
(SELECT @i:=0) i /* Initialisierung der Laufvariable */
CROSS JOIN
(
SELECT
@i:=@i+1 AS scheibe,
d.Date
FROM
equities d
GROUP BY
d.Date
) dt /* Daten */
INNER JOIN
( /* Statistikdaten */
SELECT
n.Date,
((((n.Price + o.Price) - (n.Price*2))/n.Price)) * ((SUM(op.Price * op.MCap) / SUM(np.Price * op.MCap)) -1) AS xy,
((((n.Price + o.Price) - (n.Price*2))/n.Price)) AS x,
((SUM(op.Price * op.MCap) / SUM(np.Price * op.MCap)) -1) AS y,
POW(((SUM(op.Price * op.MCap) / SUM(np.Price * op.MCap)) -1),2) AS y2
FROM
equities n
INNER JOIN equities o /* Vortagsstand Aktie*/
ON n.ID=o.ID
AND n.Date=o.Date + INTERVAL 1 DAY
INNER JOIN portfolio np /* Portofolio am Tag n */
ON n.Date=np.Date
INNER JOIN portfolio op /* Vortagsstand Portofolio-Eintrag */
ON op.ID=np.ID
AND np.Date=op.Date + INTERVAL 1 DAY
GROUP BY
n.Date,
n.ID,
o.Price
) s
ON s.Date BETWEEN dt.Date - INTERVAL 1 YEAR AND dt.Date
GROUP BY
dt.scheibe DESC
Viele Grüße Aldaris Geändert von Aldaris (08.11.2011 um 14:14 Uhr). Grund: Klammerfehler |
| | |
|
| Themen-Optionen | |
| Thema bewerten | |
|
|
Ähnliche Themen | ||||
| Thema | Autor | Forum | Antworten | Letzter Beitrag |
| MYSQL Schleife funktioniert nicht | DonDemf | PHP Einsteiger | 4 | 12.07.2011 08:57 |
| [Erledigt] Datensätze von einer MySQL in eine andere MySQL Datenbank abgleichen | Marvin75 | Datenbanken | 7 | 10.06.2011 18:00 |
| [Erledigt] Schleife 2 auf Schleife 1 beziehen bei XML Abfrage | ePole | PHP Einsteiger | 16 | 17.12.2010 09:58 |
| [Erledigt] MySQL Link Resource in einer statischen Variablen speichern | Lenki | PHP-Fortgeschrittene | 8 | 18.03.2010 16:37 |
| [Erledigt] Probleme mit While Mysql schleife | GigaToni | PHP Tipps 2009 | 11 | 29.08.2009 14:32 |
| [Erledigt] MySQL Update Schleife | the-rod | Datenbanken | 8 | 08.07.2009 21:19 |
| [Erledigt] Kann keine Umlaute im mysql client eingeben | Oger | Datenbanken | 9 | 02.04.2009 11:54 |
| MySQL Konsole und Umlaute unter Windows [LÖSUNG] | f4ckm5 | Datenbanken | 8 | 30.03.2009 22:10 |
| Warum wird die erste Schleife nur einmal durchlaufen ? | PHP Tipps 2006 | 12 | 03.03.2006 20:04 | |
| MySQL Server startet nicht mehr richtig... | Datenbanken | 16 | 03.03.2006 19:40 | |
| Suche Tipps für Persormance-Steigerung (Geld für Nützliches) | Beitragsarchiv | 18 | 16.08.2005 10:57 | |
| MYSQL läuft nur wenn /tmp auf 777 | Datenbanken | 5 | 06.07.2005 08:38 | |
| mysql root passwort vergessen | Datenbanken | 1 | 29.05.2005 11:33 | |
| MySQL auslesen ohne while schleife | PHP Tipps 2005 | 3 | 10.05.2005 12:43 | |
| Einfache Schleife gesucht für mysql nach Excel | PHP Tipps 2004 | 2 | 01.09.2004 12:28 | |
| Besucher kamen über folgende Suchanfragen bei Google auf diese Seite |
| mysql schleife beispiel, schleife in mysql, for schleife und mysql, mysql loop schleife, mysql select mit variable loop, mysql schleife for, for and to-schleife, mysql 5.5 declare variable -procedure, mysql for schleife beispiel, mysql select count mehrfach mit anderen werten durchlaufen, mysql schleife, for schleife mysql ergebnis, php mysql schleife for, sql-fehler 1064 |