3 Stimmen

Wie man einen Datensatz zurückgibt, wenn die Summe einen bestimmten Schwellenwert erreicht hat

Ich benutze SQL und habe eine Tabelle mit drei Spalten: Konto, Transaktionsdatum, Punkte. Jedes Konto wird mehrere Transaktionsdaten und Punkte für jede Transaktion haben.

Wie kann ich das Transaktionsdatum zurückgeben, wenn jedes Konto einen bestimmten Schwellenwert erreicht hat (z. B. 100 Punkte angesammelt hat). Angenommen, das erste Konto hat 2000 Transaktionen und die ersten fünf haben jeweils 21 Punkte. Ich möchte, dass die Abfrage Transaktion # 5 zurückgibt, weil das Konto dann die 100 erreicht hat.

Kann mir jemand helfen? Danke! Cat

2voto

ʞɔıu Punkte 44966
select min(a.transaction_date), a.account from

(select sum(t1.points) as thesum, t2.transaction_date, t2.account 
from table t1
inner join table t2 on t1.account = t2.account and t1.transaction_date <= t2.transaction_date
group by t2.transaction_date, t2.account
having thesum >= 100) a 

group by a.account

1voto

mwigdahl Punkte 15620

Verwenden Sie einen dreieckigen Join:

In T-SQL:

SELECT account, MIN(dt), MIN(points) 
FROM 
(
    SELECT t1.account, t1.date, sum(t2.points) AS points
    FROM table t1
      INNER JOIN table t2 ON t1.account = t2.account AND t1.dt >= t2.dt
    GROUP BY t1.account, t1.date
    HAVING SUM(t2.points) > 100
) iq
GROUP BY account

0voto

Glen Solsberry Punkte 11422

Dies sollte Ihnen geben, wonach Sie suchen.

SELECT account_id, MIN(transaction_date) FROM table t1 WHERE (SELECT SUM(points) FROM table t2 WHERE t2.transaction_date < t1.transaction_date) <= 100 GROUP BY account_id

0voto

Rune Grimstad Punkte 34670

Sie könnten dies mithilfe eines Cursors in einer gespeicherten Prozedur tun. Dann könnten Sie einfach durch die Datensätze für das Konto gehen und die Punkte akkumulieren. Sobald Sie den Schwellenwert überschreiten, geben Sie den aktuellen Datensatz zurück.

Aber dies wird wahrscheinlich ziemlich langsam sein, wenn Sie einen großen Datensatz haben, daher könnten Sie, wenn Sie die benötigten Schwellenwerte kennen, bevor Sie die Abfrage ausführen, eine zusätzliche Tabelle hinzufügen, in der Sie die Datensätze markieren, bei denen Sie die gewünschten Schwellenwerte überschreiten. Das Aktualisieren dieser zusätzlichen Tabelle könnte in einem Trigger auf der Transaktionstabelle erfolgen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X