BITTE helfen Sie uns HEUTE mit einer SPENDE
Helfen Sie das LibreOffice Forum zu erhalten!

❤️ DANKE >><< DANKE ❤️

> KEINE WERBUNG FÜR REGISTRIERTE BENUTZER!<
Ihre Spende wird für die Deckung der laufenden Kosten sowie den Erhalt und Ausbau 🌱 des LibreOffice Forums verwendet.
🤗 Als Dankeschön werden Sie im Forum als LO-SUPPORTER gekennzeichnet. 🤗

Laufende Summe "rückwärts"

Base ermöglicht es Ihnen, Ihre Daten in einer Datenbank direkt mit LibreOffice zu bearbeiten.
JuRo
Beiträge: 10
Registriert: So 14. Feb 2021, 20:49

Laufende Summe "rückwärts"

Beitrag von JuRo » Mo 15. Feb 2021, 11:12

Hallo ihr Lieben,
seit einiger Zeit beschäftige ich mich (beruflich) mit LO Base und habe mir mit Hilfe dieses und all der anderen wunderbaren Foren vieles selbst beigebracht. Nun bin ich aber an einem Punkt, wo ich echt nicht mehr weiter komme:

Ich habe eine Tabelle "Einkauf", in der unsere Rohstoffe mit Lieferdatum, Preis und Menge aufgelistet sind. Ich soll jetzt eine Abfrage schreiben aus der hervorgeht, welchen Preis pro Stück die letzten 250 gelieferten Artikel durchschnittlich haben.

Eine Abfrage, die eine laufende Summe erzeugt, habe ich bereits hinbekommen, aber die fängt natürlich ab dem zuerst gelieferten Artikel an zu zählen und nicht ab dem zuletzt gelieferten. Mir fehlt gerade jeglicher Ansatz, wie ich das umdrehen kann:

Code: Alles auswählen

SELECT COUNT( * ) AS "ID", "A"."Lieferdatum", "A"."Artikel 1", "A"."Artikel 2", "A"."Stück", SUM( "B"."Stück" ) AS "Laufende Summe" FROM "Einkauf" AS "A" INNER JOIN "Einkauf" AS "B" ON "B"."ID" <= "A"."ID" GROUP BY "Lieferdatum", "Artikel 1", "Artikel 2", "Stück"
Zudem ist es eher unwahrscheinlich, dass die laufende Summe tatsächlich einmal exakt 250 ergibt. D.h. es müsste ein Datensatz nur teilweise berücksichtigt werden. Geht das überhaupt? Beispielsweise wurde "Artikel 2" am 25.02. 12-mal geliefert, die laufende Summe wäre somit 261. 1-mal "Artikel 2" müsste also in den Durchschnittspreis mit eingerechnet werden, 11 Stück aber nicht...

Ich hoffe, mein Problem ist deutlich geworden. (Ich bin ganz schlecht im Erklären von Dingen. ;) )

Die Tabelle hänge ich mal als .ods an:

Einkauf.ods
(14.61 KiB) 111-mal heruntergeladen
Lo Version 7.0.6.2 (64x)
Eingebettete HSQLDB
Windows 10

RobertG
Beiträge: 2732
Registriert: Sa 19. Mai 2012, 17:37
Kontaktdaten:

Re: Laufende Summe "rückwärts"

Beitrag von RobertG » Mo 15. Feb 2021, 11:58

Hallo JuRo,

nur zum Verständnis:
Die Spalte "Grundpreis" ist der Preis pro Stück, oder?
Die Definition 250 Stück rückwärts von jetzt an trifft in dem angehängten Beispiel nirgendwo zu. Schließloch wurde ja von keinem Artikel diese Stückzahl verkauft, richtig?
https://de.libreoffice.org/get-help/documentation/
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=base_handbuch
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=xml_formulare

JuRo
Beiträge: 10
Registriert: So 14. Feb 2021, 20:49

Re: Laufende Summe "rückwärts"

Beitrag von JuRo » Mo 15. Feb 2021, 12:07

Hallo RobertG,

der Grundpreis ist unser EK-Preis pro Stück, auf den dann je nach Größe noch ein Aufpreis draufkommt, ja.

Der Verkauf wird in dieser Tabelle gar nicht berücksichtigt, es wird nur eingetragen, wenn eine neue Lieferung kommt. Wir bestellen halt teilweise, weil es gerade günstig ist und nicht weil alles verbraucht ist.
Lo Version 7.0.6.2 (64x)
Eingebettete HSQLDB
Windows 10

gogo
Beiträge: 1072
Registriert: Sa 5. Feb 2011, 19:07

Re: Laufende Summe "rückwärts"

Beitrag von gogo » Mo 15. Feb 2021, 12:40

Code: Alles auswählen

... order by "Lieferdatum" DESC LIMIT 250 ...
... jetzt müsste man nur noch wissen welche Liefermengen pro Lieferung kamen/kommen - evtl. reicht der Code oben aber schon um eine ungefähre Größenordnung abzuschätzen.
Wenn's genau 250 Stk sein sollen, wird's schwierig, dann ist es vermutlich am besten den Preis pro Einkauf zu kategorisieren und dann die Tabelle zu iterieren - ist dann aber kein SQL mehr ;)
g
2008 LucidL./MaverickM./WinXP LibreOffice 3.3.2 > 02/13 LinuxMint13/Xubuntu > 09/13 Debian Wheezy+LO3.5.4.2 > 01/15 Debian Jessie KDE+LO4.3.3.2/Mint17 openbox auf USB+LO4.2.8.2 > 03/16 ArchLin & LO5.1+ff > 02/18 Kubuntu

JuRo
Beiträge: 10
Registriert: So 14. Feb 2021, 20:49

Re: Laufende Summe "rückwärts"

Beitrag von JuRo » Mo 15. Feb 2021, 13:39

Hallo gogo,

Danke erstmal für deine Hilfe.
Wenn ich die Daten wie von Dir vorgeschlagen sortiere, bekomme ich zwar den zuletzt gelieferten Artikel als ersten Datensatz angezeigt, aber die laufende Summe wird trotzdem noch vom ersten Artikel (also dem mit der niedrigsten ID) aus gebildet. Ich möchte ja aber gern, dass diese eben vom letzten Artikel an (also dem mit der derzeit höchsten ID) gebildet wird.
Lo Version 7.0.6.2 (64x)
Eingebettete HSQLDB
Windows 10

gogo
Beiträge: 1072
Registriert: Sa 5. Feb 2011, 19:07

Re: Laufende Summe "rückwärts"

Beitrag von gogo » Mo 15. Feb 2021, 13:54

Code: Alles auswählen

...    
FROM 
(select * from "Einkauf" order by "Lieferdatum" desc limit 250) AS "A" 
    INNER JOIN 
(select * from "Einkauf" order by "Lieferdatum" desc limit 250) AS "B" 
...
limitiert die Gesamt-Datenmenge
g
2008 LucidL./MaverickM./WinXP LibreOffice 3.3.2 > 02/13 LinuxMint13/Xubuntu > 09/13 Debian Wheezy+LO3.5.4.2 > 01/15 Debian Jessie KDE+LO4.3.3.2/Mint17 openbox auf USB+LO4.2.8.2 > 03/16 ArchLin & LO5.1+ff > 02/18 Kubuntu

JuRo
Beiträge: 10
Registriert: So 14. Feb 2021, 20:49

Re: Laufende Summe "rückwärts"

Beitrag von JuRo » Mo 15. Feb 2021, 14:04

Ich hab das jetzt mal so eingebaut:

Code: Alles auswählen

SELECT COUNT( * ) AS "ID", "A"."Lieferdatum", "A"."Artikel 1", "A"."Artikel 2", "A"."Stück", SUM( "B"."Stück" ) AS "Laufende Summe" FROM ( SELECT * FROM "Einkauf" ORDER BY "Lieferdatum" DESC LIMIT 250 ) AS "A" INNER JOIN ( SELECT * FROM "Einkauf" ORDER BY "Lieferdatum" DESC LIMIT 250 ) AS "B" ON "B"."ID" <= "A"."ID" GROUP BY "Lieferdatum", "Artikel 1", "Artikel 2", "Stück"
bekomme dann aber die Fehlermeldung:
Cannot be in ORDER BY clause in statement [SELECT COUNT( * ) AS "ID", "A"."Lieferdatum", "A"."Artikel 1", "A"."Artikel 2", "A"."Stück", SUM( "B"."Stück" ) AS "Laufende Summe" FROM ( SELECT * FROM "Einkauf" ORDER BY "Lieferdatum" DESC LIMIT 250 ) AS "A" INNER JOIN ( SELECT * FROM "Einkauf" ORDER BY "Lieferdatum" DESC LIMIT 250 ) AS "B" ON "B"."ID" <= "A"."ID" GROUP BY "Lieferdatum", "Artikel 1", "Artikel 2", "Stück"]
Lo Version 7.0.6.2 (64x)
Eingebettete HSQLDB
Windows 10

gogo
Beiträge: 1072
Registriert: Sa 5. Feb 2011, 19:07

Re: Laufende Summe "rückwärts"

Beitrag von gogo » Mo 15. Feb 2021, 14:42

da gibt's wohl eher ein Problem mit der Limit-Anweisung, die sieht in Firebird wohl eher so aus:

Code: Alles auswählen

SELECT first 250  FROM "Einkauf" ORDER BY "Lieferdatum" DESC 
Nachdem first im Editor aber grün dargestellt wird nehme ich an, dass der Treiber das wohl nicht implementiert hat.

Bei komplexen Abfragen gilt: zuerst die Datenbasis so darstellen wie man's haben will (Also genau die DS suchen die man braucht, in der richtigen Reihenfolge darstellen und dann erst auf Basis dieser Tabelle die Berechnungen machen).
g
2008 LucidL./MaverickM./WinXP LibreOffice 3.3.2 > 02/13 LinuxMint13/Xubuntu > 09/13 Debian Wheezy+LO3.5.4.2 > 01/15 Debian Jessie KDE+LO4.3.3.2/Mint17 openbox auf USB+LO4.2.8.2 > 03/16 ArchLin & LO5.1+ff > 02/18 Kubuntu

RobertG
Beiträge: 2732
Registriert: Sa 19. Mai 2012, 17:37
Kontaktdaten:

Re: Laufende Summe "rückwärts"

Beitrag von RobertG » Mo 15. Feb 2021, 16:22

Ich nehme an, dass die Limit-Anweisung passt. Wenn die Abfrage

Code: Alles auswählen

SELECT * FROM "Einkauf" ORDER BY "Lieferdatum" DESC LIMIT 250
funktioniert, dann wäre die sicherste Lösung, diese Abfrage als Ansicht zu erstellen und dann auf die Ansicht zuzugreifen. Die Kombination von Sortierung und Gruppierung macht der HSQLDB Probleme.

Aber: Ist die Abfrage überhaupt das, was gewünscht war? Das sind doch jetzt die letzten 250 Datensätze aus dem Einkauf, nicht die letzten 250 Stück eines Artikels, oder?

Gruß

Robert
https://de.libreoffice.org/get-help/documentation/
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=base_handbuch
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=xml_formulare

Ray123
Beiträge: 101
Registriert: Di 9. Apr 2013, 12:05
Wohnort: Baden-Württemberg

Re: Laufende Summe "rückwärts"

Beitrag von Ray123 » Di 16. Feb 2021, 06:41

So sehe ich das auch und ich frage mich, welcher Sinn steckt hinter der Zahl 250? Macht es nicht viel mehr Sinn einen gleitenden Durchschnittswert mitzuführen, wie es in jedem ERP-System gemacht wird? Dann stünde der aktuelle Wert immer im neuesten Datensatz zur Verfügung und es müßten keine aufwendigen Rechenoperationen durchgeführt werden.

Gruß
Ray
Win10 20H2 x64 LO7.1.0.3

An alle, die das LibreOffice-Forum nutzen:


Bitte beteiligen Sie sich mit 7 Euro pro Monat und helfen uns bei unserem Budget für das Jahr 2024.
Einfach per Kreditkarte oder PayPal.
Als Dankeschön werden Sie im Forum als LO-SUPPORTER gekennzeichnet.

❤️ Vielen lieben Dank für Ihre Unterstützung ❤️

Antworten