T-SQL unter Verwendung der SUMME für die laufende Summe
Habe ich eine einfache Tabelle mit einigen dummy-Daten setup wie:
|id|user|value|
---------------
1 John 2
2 Ted 1
3 John 4
4 Ted 2
Kann ich wählen Sie eine laufende Summe durch ausführen der folgenden sql(MSSQL 2008) - Anweisung:
SELECT a.id, a.user, a.value, SUM(b.value) AS total
FROM table a INNER JOIN table b
ON a.id >= b.id
AND a.user = b.user
GROUP BY a.id, a.user, a.value
ORDER BY a.id
Das wird mir Ergebnisse wie:
|id|user|value|total|
---------------------
1 John 2 2
3 John 4 6
2 Ted 1 1
4 Ted 2 3
Nun ist es möglich, nur abrufen, die letzten Zeilen für jeden Benutzer? Also das Ergebnis wäre:
|id|user|value|total|
---------------------
3 John 4 6
4 Ted 2 3
Werde ich über das der richtige Weg? irgendwelche Vorschläge, oder einen neuen Pfad zu Folgen, wäre toll!
Sind Sie interessiert nur das Endergebnis, oder brauchen Sie eine laufende Summe? Speichern Sie das laufende Summe schon irgendwo, oder verwenden Sie es Nur zu generieren, die das gewünschte Ergebnis? [Ihre endgültige Ergebnis kann effektiv erstellt, ohne eine laufende Summe. Aber, wenn Sie bereits über die laufende Summe irgendwo gespeichert, aus anderen Gründen, kann es sicher verwendet werden.]
Sie swithced Ihre Antwort akzeptiert, um die Leistung zu verbessern, aber Sie haben nicht geantwortet auf meine Anfrage oben. Bitte beachten Sie, dass Sie können die Leistung verbessern, indem nicht über das laufende Summe-Methode. Wäre das für Sie von Interesse sein oder benötigen Sie alle Ergebnisse in die laufende Summe auch?
Hi Dems, ich war fleißig an der Arbeit und verpasst Ihren Kommentar. Ich bin nur nach der Summe und der dazugehörige user, also ja, ich interessiere mich für eine verbesserte Leistung.
Siehe t-clausen.dk Antwort.
Sie swithced Ihre Antwort akzeptiert, um die Leistung zu verbessern, aber Sie haben nicht geantwortet auf meine Anfrage oben. Bitte beachten Sie, dass Sie können die Leistung verbessern, indem nicht über das laufende Summe-Methode. Wäre das für Sie von Interesse sein oder benötigen Sie alle Ergebnisse in die laufende Summe auch?
Hi Dems, ich war fleißig an der Arbeit und verpasst Ihren Kommentar. Ich bin nur nach der Summe und der dazugehörige user, also ja, ich interessiere mich für eine verbesserte Leistung.
Siehe t-clausen.dk Antwort.
InformationsquelleAutor luke2012 | 2012-08-16
Du musst angemeldet sein, um einen Kommentar abzugeben.
versuchen Sie dies:
SQL Fiddle Demo
G Joseph, es sieht aus wie der link auf die SQL Fiddle ist gebrochen.
Dies wird auch nicht auf SQL Server 2008.
InformationsquelleAutor Joe G Joseph
Kein join erforderlich ist, können Sie die Geschwindigkeit der Abfrage so:
dies kann beschleunigt werden, weiter durch explizite Angabe der zusätzlichen Argumente an, um die over-Klausel von
SUM OVER
InformationsquelleAutor t-clausen.dk
hinzufügen where-Anweisung:
außerdem können Sie mit dieser Abfrage:
InformationsquelleAutor valex
Hinzufügen ein right join würde besser als eine geschachtelte select.
Oder noch einfacher:
-1 : Das ist eine grob vereinfachte Ansatz, der einfach nicht richtig funktioniert. Sie können nicht davon ausgehen, dass MAX(id) und MAX(value) geben die Ergebnisse, die von den gleichen Eingabe-Zeile.
Du hast Recht, ich merkte nach der Buchung. Aber immer noch ein smart-right join würde besser als eine geschachtelte select.
InformationsquelleAutor Michal Klouda
Kompatibel mit SQL Server 2008 oder höher
InformationsquelleAutor Mohd El-Foly