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. 🤗

[gelöst]Differenz mit Feldwert aus vorigem Datensatz berechnen

Base ermöglicht es Ihnen, Ihre Daten in einer Datenbank direkt mit LibreOffice zu bearbeiten.
Falke5179
Beiträge: 17
Registriert: Fr 17. Dez 2021, 18:25

[gelöst]Differenz mit Feldwert aus vorigem Datensatz berechnen

Beitrag von Falke5179 » So 19. Dez 2021, 18:00

Hallo,
ich bin Anfänger und dies ist mein erstes Projekt mit LibreOffice Base.
Es soll ein Fahrtenbuch werden welches in LibreOffice Calc leicht zu realisieren ist.
Als Übung will ich das jedoch mit einer Datenbank versuchen.
Folgender Screenshot ist aus LibreOffice Calc
Differenz wird aus Wert Datensatz 2 minus Wert aus Datensatz 1 berechnet.
Usw. durch ganze Tabelle ( Siehe folgende Grafik )

Differenz.png
Differenz.png (4.36 KiB) 3343 mal betrachtet

Dieses Prinzip will ich nun in einer Abfrage der Datenbank Fahrtenbuch realisieren.
Aus Tachostand wird nun die Differenz " Tageskilometer " über die gesamte Tabelle der Datenbank Fahrtenbuch berechnet.
Diese Berechnung entsteht durch die SQL Befehle ( in Foren und Base Handbuch gefunden )

SELECT "a".*, "Tachostand" - ( SELECT "Tachostand" FROM "Tabelle-Verbrauch" WHERE "ID" = ( SELECT MAX( "ID" ) FROM "Tabelle-Verbrauch" WHERE "ID" < "a"."ID" ) ) AS "Tageskilometer" FROM "Tabelle-Verbrauch" AS "a"

und funktioniert auch.
Datenbank im Anhang unter " Fahrtenbuch.zip " zur Einsicht.

Fahrtenbuch_Abfrage.png
Fahrtenbuch_Abfrage.png (20.91 KiB) 3343 mal betrachtet

Nun will ich mit dem Feld Tageskilometer weitere Berechnungen durchführen, welche jedoch nicht funktionieren.
Berechnung innerhalb eines Datensatzes funktionieren problenlos ( zB. Liter mit Preis ) wenn die Differenzberechnung
der " Tageskilometer " nicht gemacht wird.
Ist dies ein völlig falscher Ansatz ?

Bedanke mich für jegliche Hilfe und Unterstützung.

MfG
Falke5179
Dateianhänge
Fahrtenbuch.zip
(10.71 KiB) 150-mal heruntergeladen
Zuletzt geändert von Falke5179 am Do 17. Mär 2022, 11:06, insgesamt 1-mal geändert.

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

Re: Differenz mit Feldwert aus vorigem Datensatz berechnen

Beitrag von RobertG » So 19. Dez 2021, 21:51

Entweder greifst Du auch in der Berechnung auf die Tageskilometer zurück, indem Du sie auf genau die gleiche Art berechnest, oder Du baust die Abfrage als Abfrage der Abfrage zusammen:

Code: Alles auswählen

SELECT * FROM 
(SELECT "a".*, 
"Tachostand" - ( 
SELECT "Tachostand" FROM "Tabelle-Verbrauch" 
WHERE "ID" = ( SELECT MAX( "ID" ) FROM "Tabelle-Verbrauch" WHERE "ID" < "a"."ID" )
 ) 
AS "Tageskilometer" 
FROM "Tabelle-Verbrauch" AS "a")
In dem Moment ist für die Abfrage auch der Begriff "Tageskilometer" möglich.
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

Falke5179
Beiträge: 17
Registriert: Fr 17. Dez 2021, 18:25

Re: Differenz mit Feldwert aus vorigem Datensatz berechnen

Beitrag von Falke5179 » Mo 20. Dez 2021, 15:30

Hallo RobertG,
danke für die schnelle Antwort.

SELECT * FROM
(SELECT "a".*,
"Tachostand" - (
SELECT "Tachostand" FROM "Tabelle-Verbrauch"
WHERE "ID" = ( SELECT MAX( "ID" ) FROM "Tabelle-Verbrauch" WHERE "ID" < "a"."ID" )
)
AS "Tageskilometer"
FROM "Tabelle-Verbrauch" AS "a"),
"Liter" * 100 / "Tageskilometer" AS "Verbrauch / 100 Km" FROM "Tabelle-Verbrauch"


Habe an deinen Code nun meine Berechnung angehängt ( rot eingefärbt )
Diese Berechnung löst Fehler -22 aus.

Wenn ich diese Berechnung in einer Tabelle nur mit Eingabe des Wertes " Tageskilometer " durchführe funktioniert es.
( grün eingefärbt )

SELECT "ID" AS "ID",
"Datum" AS "Datum",
"Tachostand" AS "Tachostand",
"Liter" AS "Liter",
"Preis" AS "Preis",
"Tageskilometer" AS "Tageskilometer",
"Durchschnittsverbrauch-BC",
"Preis" / "Liter" AS "Preis/Liter",
"Liter" * 100 / "Tageskilometer" AS "Verbrauch / 100 Km"
FROM "Tabelle-Verbrauch"
ORDER BY "ID" ASC


Meine Literatur ist " Base_Gesamtband_einseitig_V72 - Kapitel Abfragen ".
Gibt es noch Handbücher wo die Syntax von SQL beschrieben ist incl. Beispielen.
Die Syntax von SQL ist für mich noch sehr Abstrakt.

Noch eine Frage wie kann ich im Forum das Feld " CODE: ALLES AUSWÄHLEN " erzeugen.

MfG
Falke5179

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

Re: Differenz mit Feldwert aus vorigem Datensatz berechnen

Beitrag von RobertG » Mo 20. Dez 2021, 16:30

Hallo Falke5179,

das Feld "CODE: Alles Auswählen" erreichst Du über den 5. Button von links (</>).

Code: Alles auswählen

SELECT "b".*,  "Liter" * 100 / "Tageskilometer" AS "Verbrauch / 100 Km" FROM 
(SELECT "a".*, 
"Tachostand" - ( 
SELECT "Tachostand" FROM "Tabelle-Verbrauch" 
WHERE "ID" = ( SELECT MAX( "ID" ) FROM "Tabelle-Verbrauch" WHERE "ID" < "a"."ID" )
 ) 
AS "Tageskilometer" 
FROM "Tabelle-Verbrauch" AS "a") AS "b"
Du darfst die Berechnung nicht hinten anhängen. Nach dem ersten FROM kommt die Deklaration der Datenquelle. Leider ist die Form der Abfrage aber nicht mehr editierbar, so dass Du die Abfrage nicht für die Eingabe in einem Formular nutzen kannst.

Mein Vorschlag: Erstelle aus Deiner ersten Abfrage eine Ansicht (hier: "viw_Verbrauch"). Erstelle danach die folgende Abfrage:

Code: Alles auswählen

SELECT "a".*, 
(SELECT "Tageskilometer" FROM "viw_Verbrauch" WHERE "ID" = "a"."ID") AS "Tageskilometer", 
(SELECT "Liter" * 100 / "Tageskilometer" FROM "viw_Verbrauch" WHERE "ID" = "a"."ID") AS "Verbrauch / 100 Km" 
FROM "Tabelle-Verbrauch" AS "a"
Diese Abfrage ist editierbar, da sie nur eine Tabelle mit Alias benutzt und die letzten beiden Felder durch korrelierende Unterabfragen erstellt.

Für die Grundlagen SQL kannst Du natürlich auch viele andere Quellen nutzen. Das, was ich im Handbuch zusammengetragen habe, ist aber das, was auf die internen Tabellen HSQLDB und Firebird zusammengeschnitten ist.

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

Falke5179
Beiträge: 17
Registriert: Fr 17. Dez 2021, 18:25

Re: Differenz mit Feldwert aus vorigem Datensatz berechnen

Beitrag von Falke5179 » Fr 24. Dez 2021, 13:50

Hallo RobertG,

habe deine Vorschläge umgesetzt und es funktioniert aus meiner Sicht ganz gut.
im Anhang ist die Datenbank "Fahrtenbuch" und "Fahrtenbuch Calc"

Das Diagramm in "Fahrtenbuch Calc" ist abhängig zur Datenbank "Fahrtenbuch" mit einer Scroll und Zoom Bildlaufleiste
um die Darstellung einer großen Anzahl von Datensätzen zu ermöglichen.

Nun wollte ich im Bericht der Datenbank "Fahrtenbuch" eine Summe von Liter und Preis berechnen , welches jedoch nicht funktioniert.
Habe eine kleine Datenbank " Summe.odb " ( im Anhang ) erstellt und die Summenberechnung im Bericht erfolgreich getestet. ( Summenberechnung funktioniert je Datensatz mit Feldern und mit allen Datensätzen im Bericht.)
Die Berechnung funktioniert nur in meiner Datenbank "Fahrtenbuch" nicht.

Kannst bitte mal drüberschauen wo ich hier Fehler eingebaut habe.

MfG
Falke5179
und frohe Weihnachten.
Dateianhänge
KFZ-Verbrauch.zip
(107.38 KiB) 127-mal heruntergeladen

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

Re: Differenz mit Feldwert aus vorigem Datensatz berechnen

Beitrag von RobertG » Sa 25. Dez 2021, 10:32

Hallo Falke5179,

kleine Ursache, große Wirkung: Deine Abfrage enthält als ersten Datensatz lauter leere Felder und nur den Tachostand. Wenn zu NULL etwas hinzugefügt wird, dann ist das Ergebnis immer NULL. Schreibst Du jetzt bei "Liter" einen Wert '0' rein, dann funktioniert die Summierung.

So etwas würde bei Calc nicht vorkommen. Da werden leere Zellen dann eben als 0 angesehen.

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

Falke5179
Beiträge: 17
Registriert: Fr 17. Dez 2021, 18:25

Re: Differenz mit Feldwert aus vorigem Datensatz berechnen

Beitrag von Falke5179 » Sa 25. Dez 2021, 18:12

Hallo RobertG,

danke für den Tip nun funktioniert es auch bei mir.

Beim bilden einer Summe im Bericht wird beim Auswählen das Berichtsfenster schwarz eingefärbt.
BerichtSumme.png
BerichtSumme.png (13.55 KiB) 3091 mal betrachtet
Die Einstellung Funktion,Datenfeld usw. kann man trotzdem auswählen.
Nach der Auswahl wird durch mehrmaliges klicken in das Berichtsfenster wieder alles normal sichtbar und die Einstellungen werden auch übernommen.
Kommt das von LibreOffice oder ist das meine Rechnerkonfiguration?

Dies ist mein erstes Thema welches für mich abgeschlossen wäre da jetzt alles funktioniert.
Muß ich das Thema selbst schließen oder wird das durch Moderatoren bzw. Administratoren durchgeführt?
Wie ist hier die richtige Vorgehensweise?

MfG
Falke 5179

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

Re: Differenz mit Feldwert aus vorigem Datensatz berechnen

Beitrag von RobertG » Sa 25. Dez 2021, 19:17

Hallo Falke,

solche Erscheinungen habe ich auch schon abhängig von der jeweiligen Benutzeroberfläche gesehen. In Linux unter KDE ist anders als unter gtk. Windows dann wieder anders …

Ist wohl ein Bug, der nur schwer reproduzierbar ist.

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

Falke5179
Beiträge: 17
Registriert: Fr 17. Dez 2021, 18:25

Re: Differenz mit Feldwert aus vorigem Datensatz berechnen

Beitrag von Falke5179 » Mo 27. Dez 2021, 14:07

Hallo RobertG,

grundsätzlich funktioniert alles soweit.

Ich will nun aus einer Abfrage mit 108 Datensätzen einen Bericht erstellen.
Funktioniert einwandfrei in einer Zeit von ca. 24 sec.

Wenn ich nun aus dieser Abfrage eine View erstelle und aus dieser Ansicht( Gleiche Spaltenanzahl mit 108 Datensätzen)
einen Bericht erstelle dauert das vielleicht ca. 1 sec.

Muss man hier immer den Weg über die Ansicht gehen oder ist in meiner Abfrage ein Fehler welcher diese Zeitdifferenz bei Erstellung ergibt.

MfG
Falke5179

Falke5179
Beiträge: 17
Registriert: Fr 17. Dez 2021, 18:25

Re: Differenz mit Feldwert aus vorigem Datensatz berechnen

Beitrag von Falke5179 » Mo 27. Dez 2021, 15:52

Hallo RobertG,

beim Erstellen des Berichts werden die Berichtsbereiche innerhalb der Seitenbereiche angezeigt und ich finde nichts um das umzureihen. Vor einigen Tagen war das umgekehrt und richtig.

Ist das von LibreOfficeBase oder gibt es dazu Einstellungen?
Oder muß ich eine Änderungsinstallation durchführen.
Berichtskopf .png
Berichtskopf .png (17.18 KiB) 3005 mal betrachtet
MfG
Falke5179

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