Hallo,
In der folgenden Abfrage funzt die lfd. Summe einwandfrei
SELECT M.seasonid_f,
M.matchid,
M.matchresult,
Q.quotebettyp,
B.betid,
B.quoteid_f,
B.wager,
B.gainandloss,
(SELECT Sum(BR.gainandloss)
FROM bets AS BR
WHERE BR.betid < B.betid + 1) AS lfdSaldo,
Q.quoterange,
Q.quote,
Q.won,
B.teamid_f,
T.teamname
FROM teams AS T
INNER JOIN (quotes AS Q
INNER JOIN (bets AS B
INNER JOIN matches AS M
ON B.matchid_f = M.matchid)
ON Q.quoteid = B.quoteid_f)
ON T.teamid = B.teamid_f
ORDER BY B.betid
Wenn ich diese jetzt nach einem Feld filtere stimmt die lfd. Summe nicht
mehr. Nach einigem Überlegen bin ich darauf gekommen, dass das Subselect
natürlich auch die "ausgefilterten" DS enthält.
Dachte dann ich könnte es mit einer temporären lfd. Nr. lösen, und habe
ein zweites Subselect eingefügt
(SELECT Count(*) FROM bets As BL WHERE BL.betid < B.betid + 1) AS tBetID
Das funzt aber auch nur ohne Filter. Auch wieder logisch, s.o.
Frage also, - wie muss die WHERE-Klausel in letzterem Subselect lauten?
Oder gibt es eine andere Lösung?
Stehe da echt auf'm Schlauch :-(. Hat vielleicht jemand den richtigen Schubser
für mich?
gruss ekkehard
Hallo Ekkehard,
ich habe es jetzt nicht explizit getestet, aber gefühlt würde ich erst filtern und dann die lfd. Summe berechnen.
Gruß Knobbi38
Hallo Ulrich,
Jaaa, der Gedanke lag mir auch nicht fern. Habe es auch in der
Form versucht, dass ich die Subselects als auch die Abfrage an
sich gefiltert habe, was es allerdings nicht gebracht hat. Leider
habe ich auch immer noch Probleme mit SQL wenn es etwas komplexer
wird :-(.
Was hast du da im Kopf? Eine vorgeschaltete Abfrage zum Filtern,
und diese als Grundlage verwenden?
Was mir gerade noch einfällt, - eine Zahlentabelle einfügen, die
eine lfd. Nr. einbringt. Leider hab ich vergessen wie das geht.
Muss ich ein bisschen testen. Eberhards SQL-Sammlung ist ja nicht
mehr erreichbar.
Oder würdest du mir da auf die Sprüngen helfen wollen?
gruss ekkehard
Zitat von: Beaker s.a. am Mai 09, 2025, 13:30:51Was hast du da im Kopf? Eine vorgeschaltete Abfrage zum Filtern,
und diese als Grundlage verwenden?
Wäre zumindest einen Versuch wert.
Grüße
Ulrich
Hallo Ulrich,
Nicht nötig. Ich habe die letzten Stunden in Zusammenarbeit mit ChatGPT
die folgende Abfrage entwickelt, die genau macht, was ich will, und zudem
auch auf weitere Filter angepasst werden kann
PARAMETERS parTeam Long, parSeason Long, parQuoteRange Long;
SELECT M.seasonid_f, M.matchid, M.matchresult, Q.quotebettyp, B.betid, B.quoteid_f, B.wager, B.gainandloss, (
SELECT Sum(BR.gainandloss)
FROM bets AS BR
WHERE
BR.betid <= B.betid
AND (parTeam IS NULL OR BR.teamid_f = parTeam)
AND (parSeason IS NULL OR EXISTS (
SELECT 1 FROM matches AS MR WHERE MR.matchid = BR.matchid_f AND MR.seasonid_f = parSeason
))
AND (parQuoteRange IS NULL OR EXISTS (
SELECT 1 FROM quotes AS QR WHERE QR.Quoteid = BR.quoteid_f AND QR.QuoteRange = parQuoteRange
))
) AS lfdSaldo,
Q.quoterange, Q.quote, Q.won, B.teamid_f
FROM quotes AS Q INNER JOIN (bets AS B INNER JOIN matches AS M ON B.matchid_f = M.matchid) ON Q.quoteid = B.quoteid_f
WHERE (parTeam IS NULL OR B.teamid_f = parTeam)
AND (parSeason IS NULL OR M.seasonid_f = parSeason)
AND (parQuoteRange IS NULL OR Q.quoterange = parQuoterange)
ORDER BY B.betid
Ich danke dir für deine Anteilnahme.
gruss ekkehard
Wo ist jetzt wieder der Button für "erledigt" ?
Ach, da, - unten links.