Hallo Stephan,
ich gehe davon aus, dass Du auf die HSQLDB zurückgreifst?
Diese bietet zwar beschränkte Möglichkeiten, jedoch kannst Du trotzdem zum Ziel gelangen.
Folgende Idee:
1.) Erstelle einen View, der eine nach ProductID und Datum sortierte Ergebnistabelle bereitstellt. Auf diesen greifst Du in den nachfolgenden Schritten zu
2) Erstelle mittels SELF JOIN eine laufende Nummer, gruppiert über die ProductID
3) Über die laufende Nummer greifst Du anschließend auf den Vorgängerdatensatz zu und ermittelst so die Differenz zwischen dem Ausleihdatum der aktuellen und der Vorgängerzeile. Diese Differenz wird in einer separaten Spalte ausgegeben
4) zum Schluss lässt Du Dir nur die Daten mit dem letzten Ausleihdatum ausgeben.
Genug der Theorie. Jetzt mit Beispiel.
Annahme: Tabelle Logtab mit den Spalten ProductID / Datum

- Logtab.png (3.83 KiB) 3776 mal betrachtet
Grundlage für den View "Log_V":
Code: Alles auswählen
SELECT
"Logtab"."ID",
"Logtab"."ProductID",
"Logtab"."Datum" FROM "Logtab"
ORDER BY "ProductID", "Datum"
Nun wird der View abgefragt:
-Erzeugung der laufenden Nummerierung und Ermittlung der Monats- / Tagesdifferenz zum Vorgängerdatensatz
Code: Alles auswählen
SELECT
(SELECT COUNT(*) FROM Log_V AS X
WHERE Log_V.Datum > X.Datum AND Log_V.ProductID = X.ProductID)+1 AS LFD,
Log_V.*,
DATEDIFF('mm',(SELECT MAX(Datum) FROM Log_V AS X
WHERE Log_V.Datum > X.Datum AND Log_V.ProductID = X.ProductID), Datum) AS DIFF_MON,
DATEDIFF('dd',(SELECT MAX(Datum) FROM Log_V AS X
WHERE Log_V.Datum > X.Datum AND Log_V.ProductID = X.ProductID), Datum) AS DIFF_TAG
FROM Log_V

- lfd_Nr.png (7.29 KiB) 3776 mal betrachtet
..und letzten Endes die Einschränkung auf den aktuellsten Datensatz:
Code: Alles auswählen
SELECT ProductID, Datum, DIFF_MON, DIFF_TAG
FROM
(
SELECT
(SELECT COUNT(*) FROM Log_V AS X
WHERE Log_V.Datum > X.Datum AND Log_V.ProductID = X.ProductID)+1 AS LFD,
Log_V.*,
DATEDIFF('mm',(SELECT MAX(Datum) FROM Log_V AS X
WHERE Log_V.Datum > X.Datum AND Log_V.ProductID = X.ProductID), Datum) AS DIFF_MON,
DATEDIFF('dd',(SELECT MAX(Datum) FROM Log_V AS X
WHERE Log_V.Datum > X.Datum AND Log_V.ProductID = X.ProductID), Datum) AS DIFF_TAG
FROM Log_V
) Tab_A,
(
SELECT ProductID, MAX(Datum) AS Datum FROM Log_V
GROUP BY ProductID
) Tab_B
WHERE Tab_A.ProductID = Tab_B.ProductID
AND Tab_A.Datum = Tab_B.Datum

- Ergebnis.png (4.69 KiB) 3776 mal betrachtet
Viel Erfolg!
Gruß Barlee