2017-12-20 3 views

Antwort

0

Ich bin nicht sicher, ob Sie für Excel-Lösung oder SQL eines suchen weil es mit SQL zu arbeiten, ohne eindeutigen Schlüsseln schwer. Ich werde versuchen, Ihnen einen Vorschlag zu geben, wie ich das machen würde, vorausgesetzt, dass jede Transaktion ein eindeutiges ID-Feld hat.

Zuerst alle positiven Änderungen für Konto berechnen (dies wird ein Teil der Lösung sein, aber ich teile es für Klarheit).

SELECT 
    t.account, 
    SUM(t.debit) AS change_positive 
FROM 
    transactions AS t 
WHERE 
    t.debit > 0 
GROUP BY 
    t.account 

Jetzt haben Sie den Gesamtwert der wiederhergestellten Lastschrift nach Konto. In diesem Fall (10 + 5 +20)

Jetzt müssen Sie ähnliche Operation für Belastungen (negative Änderung) aber nur bis gegenwärtiger Betrieb z. für 21.12.2017 ist es -20, für 25.12.2017 ist es -55. Wenn Sie den Wert von debits_till_date haben, werden Sie wissen, ob payments_total diese Zahlung gedeckt hat oder ob es bereits zu hoch war, um von Zahlungen gedeckt zu werden. In SQL als Gesamt Abfrage (einschließlich vorherigen) würde es so aussehen:

SELECT 
    q.account, 
    q.date, 
    q.transaction_debit, 
    q.remainings_from_payments 
FROM 
    (
     SELECT 
      t.account, 
      t.date, 
      t.debit AS transaction_debit, 
      SUM(t2.debit) AS debits_till_date, 
      i.payments_total, 
      SUM(t2.debit) + i.payments_total AS remainings_from_payments 
     FROM 
      transactions AS t 
     LEFT JOIN transactions AS t2 ON t.account = t2.account AND t.date >= t2.date AND t2.debit < 0 
     LEFT JOIN (SELECT t.account, SUM(t.debit) AS payments_total FROM transactions AS t WHERE t.debit > 0 GROUP BY t.account) AS i ON t.account =  i.account 
     GROUP BY 
      t.account, t.date 
    ) AS q 
    WHERE 
     q.transaction_debit < 0 
     AND q.remainings_from_payments < 0 

Wenn Sie letzten Teil entfernen „AND q.remainings_from_payments < 0“ können Sie sehen, wie viel von Zahlungen blieb nach jedem negative Transaktion


SQLFiddle DEMO

+0

Hallo StromoPL, danke für die Abfrage. Lassen Sie mich versuchen, wenn es funktioniert. Tatsächlich schaue ich auf die gleiche Lösung wie in der Link http://www.sqlservercentral.com/articles/FIFO+Queues/145613/ Ich habe nur SQL DB2 und nicht sicher, wie Sie die Abfrage in verwendet werden der Link. außerdem habe ich keine eindeutige ID für die Transaktion. Nur Bezeichner ist die Summe aus Guthaben und Belastung für das Datum. –

+0

Chris, Ich aktualisierte Abfrage, um "Datum" Feld zu verwenden und "Identifikation" zu vermeiden. Es sollte funktionieren, solange die Daten in den Konten eindeutig sind. Die von mir zur Verfügung gestellte Abfrage wurde auf mySQL getestet, aber es ist ziemlich Standard und sollte auf jeder Datenbank funktionieren, die plain SQL unterstützt (benenne einfach "transactions" -Tabelle von der Abfrage in den Namen deiner Tabelle um) – StormoPL

+0

http://sqlfiddle.com/#! 9/49759d/1 –