Fensterfunktion

Ich versuche, einen gleitenden Durchschnitt mit einer Abfrage in Firebird zu ermitteln, das soll mit einer Fensterfunktion
avg(Price) OVER(ORDER BY Date
ROWS BETWEEN 2 PRECEDING AND CURRENT ROW )
as moving_average
möglich sein. Bei Eingabe der Zeile ‘ROWS BETWEEN 2 PRECEDING AND CURRENT ROW’ erhalte ich aber immer eine Fehlermeldung
‘SQL error code =-104 Token Unknown Rows’
Auch in der Firebird-Referenz wird ‘ROWS BETWEEN …’ angegeben. Mache ich etwas falsch oder macht LibreOffice etwas anders als in der Referenz?

Ist immer gut, wenn Du auch die Quelle angibst: In der Dokumentation zu Firebird 3 finde ich nur einen Hinweis auf ROWS BETWEEN, der aussagt, dass das erst ab Version Firebird 4 untertützt wird.
Siehe Firebird 3.0 Sprachreferenz
Die interne Datenbank von LibreOffice ist eine Firebird 3 - Datenbank.

Vorschlag für einen Bericht unter Zuhilfenahme von Calc:

  1. Erstelle die Abfrage ganz einfach ohne das Aggregat, nur mit den erforderlichen Spalten und die Zeilen in der richtigen Sortierfolge.
  2. Öffne ein Calc-Dokument und drücke Strg+Ummsch+F4 für das Datenquellenfenster.
  3. Ziehe das Icon der Abfrage in die Tabellenkalkulation.
  4. Füge eine Formel-Spalte für das Aggregat an, einschließlich Spaltenüberschrift neben den anderen.
  5. Speicher das Dokument.

Nachdem die Datenbank verändert wurde, klickst Du irgendeine Zelle in dem importierten Bereich und machst Daten>Aktualisieren.

Weiterhin gibt es in Calc die Möglichkeit eine Pivot-Tabelle direkt aus einer Datenbankabfrage zu generieren. Pivot-Tabellen können auch gleitende Durchschnitte berechnen.
Beispiel https://ask.libreoffice.org/uploads/short-url/qH4rOXfDCqsp0eW95IJ2YDvc6Gl.ods
aus Topic Creating graphs - #5 by Villeroy

Ich will zurückkommen auf meine Frage zum gleitenden Durchschnitt.
Ich denke, ich habe das Problem mit einer Unterabfrage gelöst, und möchte die Abfrage (für Firebird 3) zur Diskussion stellen.
Ich habe nur 1 Tabelle: Tbl_Bz01 (enthält Blutzuckerwerte). Ich weiß, dass dafür eine Datenbank überdimensioniert ist, das Ergebnis sieht für mich in Berichten aber besser aus als in Calc.
Die Abfrage holt jeweils den Durchschnitt der Blutzuckerwerte für jeden einzelnen Tag und berechnet dann für jeden Tag den Durchschnitt der letzten 90 Tage. Das ist das, was ich unter einem gleitenden Durchschnitt verstehe.

SELECT
“T1”.“Datum”,
“T1”.“Tagesdurchschnitt” AS “Tagesdurchschnitt”,
“T1”.“Tagesdurchschnitt” * 0.029 + 2.29 AS “HbA1c_Tages”,
(
SELECT AVG(“T2”.“Tagesdurchschnitt”)
FROM (
SELECT
CAST(“Timestamp” AS DATE) AS “Datum”,
AVG(CAST(“Wert” AS DOUBLE PRECISION)) AS “Tagesdurchschnitt”
FROM “Tbl_Bz01”
GROUP BY “Datum”
) “T2”
WHERE “T2”.“Datum” BETWEEN “T1”.“Datum” - 89 AND “T1”.“Datum”
) AS “90Tage_Durchschnitt”,
(
SELECT AVG(“T2”.“Tagesdurchschnitt”)
FROM (
SELECT
CAST(“Timestamp” AS DATE) AS “Datum”,
AVG(CAST(“Wert” AS DOUBLE PRECISION)) AS “Tagesdurchschnitt”
FROM “Tbl_Bz01”
GROUP BY “Datum”
) “T2”
WHERE “T2”.“Datum” BETWEEN “T1”.“Datum” - 89 AND “T1”.“Datum”
) * 0.029 + 2.29 AS “HbA1c_90Tage”
FROM (
SELECT
CAST(“Timestamp” AS DATE) AS “Datum”,
AVG(CAST(“Wert” AS DOUBLE PRECISION)) AS “Tagesdurchschnitt”
FROM “Tbl_Bz01”
GROUP BY “Datum”
) “T1”
ORDER BY “T1”.“Datum” DESC