-
SQL Mengensummen eines Artikels vom aktuellsten Datum
Hallo zusammen!
Ich habe hier eine riesige Lagerbewegungsdatei und bräuchte jeweils die Summe der bewegten Mengen des jeweiligen Artikels vom aktuellsten Buchungsdatum.
Artikel-Nr |
Datum |
Menge |
500023 |
09.09.2014 |
20000 |
500023 |
09.09.2014 |
3750 |
500023 |
07.05.2014 |
1200 |
500011 |
08.09.2014 |
200 |
500011 |
07.04.2014 |
4000 |
500011 |
03.03.2014 |
2500 |
Das Ergebnis sollte dann so aussehen:
Artikel-Nr |
Datum |
Menge |
500023 |
09.09.2014 |
23750 |
500011 |
08.09.2014 |
200 |
So bald ich mit MAX und SUM-Argumenten gleichzeitig arbeite, bekomme ich immer die Summe aller Mengen, unabhängig vom aktuellsten Datum. Im Fall von Artikel 500023 vom 09.09.2014 erhalte ich also 24950.
Mein Denkansatz ist dabei folgendermaßen:
SELECT Artikel-Nr, MAX(Datum), SUM(Menge) FROM Tabelle
GROUP BY Artikel-Nr
Was mache ich dabei falsch?
Gruß, Harry72
-
Du bekommst eben das was da steht, Summe je Artikel und das letzte Datum.
Hier musst du einschränken:
Select a.Artikel, max(a.Datum), sum(a.Menge) from Tabelle a
inner join (select Artikel, max(Datum) as Datum from Tabelle b Group by Artikel) b on a.Datum=b.Datum
Group by a.Artikel
-
Funktioniert leider nicht so wie erhofft.
Wenn ich wie vorgeschlagen im on "b.Datum" schreibe, dann erscheint folgender Fehler:
Spalte Datum nicht in Tabelle B in *N.
Daraufhin hab ich das b. vor dem Feld Datum entfernt.
Der SQL sieht jetzt so aus:
SELECT A.Artikel-Nr, max(a.Datum), SUM(a.Menge)
FROM Tabelle A
INNER JOIN
(SELECT Artikel-Nr, MAX(Datum) AS Datum from Tabelle b
GROUP BY Artikel-Nr)
B ON A.Datum=Datum and
a.Artikel-Nr = b.Artikel-Nr
WHERE A.Artikel-Nr = '500023'
GROUP BY A.Artikel-Nr
order by a.Artikel-Nr
Leider erhalte ich jetzt wieder die Summe des Feldes Menge aller Datensätze von 500023.
Ich möchte aber nur die Summe der Datensätze Menge mit dem höchsten Datum.
-
Das SQL-Statement muss wie folgt aussehen:
Code:
With x as (Select ArtikelNr, Max(Datum) Datum
from Tabelle
Group By ArtikelNr)
Select x.ArtikelNr, x.Datum, Sum(Menge)
From x join Tabelle a on x.ArtikelNr = a.ArtikelNr
and x.Datum = a.Datum
Group By x.ArtikelNr, x.Datum
oder
Code:
Select x.ArtikelNr, x.Datum, Sum(Menge)
From (Select ArtikelNr, Max(Datum) Datum
From Tabelle
Group By ArtikelNr) x
Join Tabelle a on x.ArtikelNr = a.ArtikelNr
and x.Datum = a.Datum)
Group By x.ArtikelNr, x.Datum
Birgitta
-
@Birgitta
Das stimmt so nicht. Es muss ein "Inner Join" her, damit die Einschränkung auf das letzte Datum passiert. Ohne "inner" wird ein Left join daraus und ich erhalte auch die Summen der anderen Daten und nicht nur des letzten Datums.
Ein Endgruppierung auf das Datum ist nicht erforderlich. Ein Group by Datum oder max(Datum) muss das selbe Ergebnis bringen.
Bei meinem obigen Beispiel fehlt nur der " on a.artikel = b.artikel and ...".
Wir machen das schon häufiger so.
Der SQL
SELECT
A.Artikel-Nr,
max(a.Datum),
SUM(a.Menge)
FROM Tabelle A
INNER JOIN
(SELECT
Artikel-Nr,
MAX(Datum) AS Datum
from Tabelle b
GROUP BY Artikel-Nr) B
ON A.Datum = B.Datum
and a.Artikel-Nr = b.Artikel-Nr
WHERE A.Artikel-Nr = '500023'
GROUP BY A.Artikel-Nr
order by a.Artikel-Nr
sollte eigentlich richtig sein.
-
@Birgitta
OK, ich nehm's zurück.
Anders herum geht's natürlich auch.
-
Nur zur Info: INNER JOIN und JOIN ist das Gleiche!
Das kannst Du auch gerne in der SQL Referenz nachlesen:
"If a join operator is not specified, INNER is implicit."
Für einen LEFT JOIN muss LEFT explizit angegeben werden.
Meine beiden Statements waren absolut korrekt.
Ich hab' auch schon das eine oder andere SQL-Statement abgesetzt und außerdem probiere ich meine Statements i.d.R. aus bevor ich sie poste.
Birgitta
Similar Threads
-
By KingofKning in forum NEWSboard Programmierung
Antworten: 8
Letzter Beitrag: 25-07-14, 15:45
-
By dino in forum IBM i Hauptforum
Antworten: 16
Letzter Beitrag: 27-11-13, 13:32
-
By j.k. in forum NEWSboard Programmierung
Antworten: 12
Letzter Beitrag: 15-11-10, 16:31
-
By PS in forum IBM i Hauptforum
Antworten: 4
Letzter Beitrag: 09-02-03, 10:33
-
By HoScHiE in forum IBM i Hauptforum
Antworten: 11
Letzter Beitrag: 06-08-01, 14:47
Berechtigungen
- Neue Themen erstellen: Nein
- Themen beantworten: Nein
- You may not post attachments
- You may not edit your posts
-
Foren-Regeln
|
Erweiterte Foren Suche
Google Foren Suche
Forum & Artikel Update eMail
AS/400 / IBM i
Server Expert Gruppen
Unternehmens IT
|
Kategorien online Artikel
- Big Data, Analytics, BI, MIS
- Cloud, Social Media, Devices
- DMS, Archivierung, Druck
- ERP + Add-ons, Business Software
- Hochverfügbarkeit
- Human Resources, Personal
- IBM Announcements
- IT-Karikaturen
- Leitartikel
- Load`n`go
- Messen, Veranstaltungen
- NEWSolutions Dossiers
- Programmierung
- Security
- Software Development + Change Mgmt.
- Solutions & Provider
- Speicher – Storage
- Strategische Berichte
- Systemmanagement
- Tools, Hot-Tips
Auf dem Laufenden bleiben
|
Bookmarks