Hallo, ich weiss nicht wohin mit dem Thema Firebird, auf Wikipedio steht, dass die Syntax so ähnlich ist wie Oracle, deslhab habe ich das Thema hier eröffnet.
Es geht um eine Stored Procedure an der ich gerade bastele und nicht weiterkomme.
Aus einer Tabelle wo alle Zeitstempel aller Mitarbeiter gespeichert werden, soll herausgefunden werden, ob ein bestimmter Mitarbeiter im Plus oder Minus ist.
Ich habe ein Select womit ich alle Zeitstempel in einem bestimmten Zeitraum und einer bestimmten User_ID abfrage.
Pro Tag gibt es eine gerade Anzahl an Stempel, sieht folgendermaßen aus:
02.05.2018, 08:35:06.000
02.05.2018, 11:58:02.000
02.05.2018, 12:35:51.000
02.05.2018, 16:58:30.000
03.05.2018, 08:37:03.000
03.05.2018, 12:12:43.000
03.05.2018, 12:34:47.000
03.05.2018, 17:02:20.000
04.05.2018, 08:37:05.000
04.05.2018, 12:00:55.000
04.05.2018, 12:29:25.000
15.05.2018, 08:31:48.000
15.05.2018, 12:01:27.000
15.05.2018, 12:18:19.000
15.05.2018, 16:59:14.000
15.05.2018, 16:59:20.000
Ich habe mir überlegt, mit einer Schleife alle Einträge durchzugehen, eine Hilfsvariable hochzuzählen und zu schauen ob diese gerade oder ungerade ist, die Zwischenergebnise aus der Abfrage in einer Hilfsvariable zwischenzuspeichern und die Differenz in Minuten summieren.
Sieht folgendermaßen aus:
Allerdings bekomme ich beim Ergebnis immer NULL. Ich verstricke mich hier auch in der Schleife, vllt gibt es eine elegantere Methode, da ich auch noch den Tageswechsel mit beachten muss.
Es geht um eine Stored Procedure an der ich gerade bastele und nicht weiterkomme.
Aus einer Tabelle wo alle Zeitstempel aller Mitarbeiter gespeichert werden, soll herausgefunden werden, ob ein bestimmter Mitarbeiter im Plus oder Minus ist.
Ich habe ein Select womit ich alle Zeitstempel in einem bestimmten Zeitraum und einer bestimmten User_ID abfrage.
Pro Tag gibt es eine gerade Anzahl an Stempel, sieht folgendermaßen aus:
02.05.2018, 08:35:06.000
02.05.2018, 11:58:02.000
02.05.2018, 12:35:51.000
02.05.2018, 16:58:30.000
03.05.2018, 08:37:03.000
03.05.2018, 12:12:43.000
03.05.2018, 12:34:47.000
03.05.2018, 17:02:20.000
04.05.2018, 08:37:05.000
04.05.2018, 12:00:55.000
04.05.2018, 12:29:25.000
15.05.2018, 08:31:48.000
15.05.2018, 12:01:27.000
15.05.2018, 12:18:19.000
15.05.2018, 16:59:14.000
15.05.2018, 16:59:20.000
Ich habe mir überlegt, mit einer Schleife alle Einträge durchzugehen, eine Hilfsvariable hochzuzählen und zu schauen ob diese gerade oder ungerade ist, die Zwischenergebnise aus der Abfrage in einer Hilfsvariable zwischenzuspeichern und die Differenz in Minuten summieren.
Sieht folgendermaßen aus:
Code:
SET TERM ^ ;
ALTER PROCEDURE SP_ATTENDANT
RETURNS (
Datum Timestamp,
DiffMinuten Integer,
Ergebnis Integer,
x Timestamp,
y Timestamp
)
AS
declare variable i Integer;
declare variable Summe Integer;
BEGIN
i = 0;
Summe = 0;
FOR SELECT a."WHEN"
FROM ATTENDANT a
WHERE cast(a."WHEN" as date) >= '01.05.2018'
AND cast(a."WHEN" as date) < current_date
AND a.USERID = 10
INTO :Datum
DO
BEGIN
i = i + 1;
if (mod(i, 2) = 0) then
x = Datum;
else
y = Datum;
Summe = Summe + DATEDIFF(MINUTE FROM (x) TO (y));
END
Ergebnis = Summe;
END^
SET TERM ; ^
GRANT EXECUTE
ON PROCEDURE SP_ATTENDANT TO SYSDBA;
Allerdings bekomme ich beim Ergebnis immer NULL. Ich verstricke mich hier auch in der Schleife, vllt gibt es eine elegantere Methode, da ich auch noch den Tageswechsel mit beachten muss.