Ich habe Probleme mit der Auswahl der Summe der Salden für bestimmte Acc, Nam für einen bestimmten Zeitraum.ORACLE SQL Wählen Sie nur MAX jeder Gruppe durch Nummer
SELECT Acc, Nam, SUM(Bal) FROM table WHERE
MAX(Par) = (SELECT Par WHERE Acc IN (101,102) AND Dat >1105 AND Dat <1405)
AND Acc IN (101,102) AND Dat >1105 AND Dat <1405
GROUP BY Acc, Nam
Acc --- Nam --- Bal --- Par --- Dat
101 --- One --- 150 --- 131 --- 1205
101 --- One --- 120 --- 132 --- 1205
101 --- One --- 160 --- 133 --- 1305
102 --- Two --- 190 --- 121 --- 1205
102 --- Two --- 110 --- 122 --- 1305
102 --- Two --- 150 --- 123 --- 1305
soll die endgültige Ausgabe sein:
Acc --- Nam --- Bal
101 --- One --- 280
102 --- Two --- 340
So wird es von Konto und Kontonamen getrennt innerhalb der Frist aller Salden summiert. Es sollten nur Salden mit der höchsten Par-Nummer pro Tag addiert werden. Bitte beraten.
UPDATE
Ich habe es mit unter row_number Methode, aber was erhielt ich nur die Summe aller Zeilen (ohne einige von ihnen). Unten ist der Code, der zeigt: zwei Konten, zwei Kontobeschreibungen, Parameter, Daten und Kontostand. Ich möchte zwei Zeilen sehen, die die Summe aller Daten in einem Bereich für ein bestimmtes Konto mit der höchsten Parameternummer an einem separaten Tag sein werden. Die endgültige Ausgabe sollte nur aus drei Spalten bestehen: Konto, Name und Kontostand. Diese Abfrage sollte in der Lage sein, den maximalen Parameter eines jeden Tages auszuwählen und alle diese maximalen Werte zu einem Konto zu addieren.
SELECT h.account, h.name, h.paramet, h.date, h.balance
FROM h
WHERE TRUNC(h.date) > '01-Jun-16' AND TRUNC(h.date) < '10-Jun-16'
AND h.account IN ('410212','410213')
AND h.fund LIKE 'SSPSP
Heißt das, dass das nicht funktioniert: AUSWÄHLEN Acc, Nam, SUM (Bal) aus Tabelle WHERE Acc IN (101,102) UND Dat> 1105 UND Dat <1405 GROUP BY Acc, Nam –
MAX() kann nicht in WHERE-Anweisungen gehen aber Sie können es in HAVING-Klausel setzen, die after bestimmt wird r die Gruppierung und Aggregation. Weiter (SELECT Par WHERE Acc IN (101,102) AND Dat> 1105 AND Dat <1405) ist nicht einmal gültig, da sie keine Tabelle oder Anything identifiziert. Die von Ihnen gepostete Abfrage würde Ihnen nicht einmal die Ergebnisse geben, die Sie anzeigen – Matt
@Matt Eingabeabfrage sollte sein: 'SELECT h.account, h.name, h.paramet, h.date, h.balance VON h WHERE TRUNC (h.date)> '01 -Jun-16 'UND TRUNC (h.date) <'10 -Jun-16' UND h.account IN ('410212', '410213') UND h.fund LIKE 'SSPSP' –