Neuigkeiten:

Wenn ihr euch für eine gute Antwort bedanken möchtet, im entsprechenden Posting einfach den Knopf "sag Danke" drücken!

Mobiles Hauptmenü

lfd. Summe und Filter

Begonnen von Beaker s.a., Mai 08, 2025, 15:18:46

⏪ vorheriges - nächstes ⏩

Beaker s.a.

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 tBetIDDas 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
Alles, was geschieht, geschieht. - Alles, was während seines Geschehens etwas anderes geschehen lässt, lässt etwas anderes geschehen. - Alles, was sich selbst im Zuge seines Geschehens erneut geschehen lässt, geschieht erneut. - Allerdings tut es das nicht unbedingt in chronologischer Reihenfolge.
(Douglas Adams, Mostly Harmless)

Knobbi38

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

Beaker s.a.

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
Alles, was geschieht, geschieht. - Alles, was während seines Geschehens etwas anderes geschehen lässt, lässt etwas anderes geschehen. - Alles, was sich selbst im Zuge seines Geschehens erneut geschehen lässt, geschieht erneut. - Allerdings tut es das nicht unbedingt in chronologischer Reihenfolge.
(Douglas Adams, Mostly Harmless)

Knobbi38

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


Beaker s.a.

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.
Alles, was geschieht, geschieht. - Alles, was während seines Geschehens etwas anderes geschehen lässt, lässt etwas anderes geschehen. - Alles, was sich selbst im Zuge seines Geschehens erneut geschehen lässt, geschieht erneut. - Allerdings tut es das nicht unbedingt in chronologischer Reihenfolge.
(Douglas Adams, Mostly Harmless)