Zeitdifferenzen ausgeben

Datenbanklösungen mit AOO/LO

Moderator: Moderatoren

Benutzeravatar
komma4
********
Beiträge: 5332
Registriert: Mi, 03.05.2006 23:29
Wohnort: Chon Buri Thailand Asia
Kontaktdaten:

Re: Zeitdifferenzen ausgeben

Beitrag von komma4 »

metalmessiah hat geschrieben:Ich hätte jetzt noch gern ein Feld, in dem die geleistete Arbeitszeit automatisch eingetragen wird.
Warum "ein Feld"?
Du kannst die genutzte Zeit doch aus der Start- und Ende-Zeit jederzeit errechnen (ein Speichern / ein zusätzliches Feld wäre also überflüssig).

Nun kommt es darauf an, welche Datenbank-engine Du nutzt.
Im Standard-SQL gibt es DATEDIFF zur Berechnung einer Differenz von Zeiten, bei Nutzung einer internen HSQLDB findest Du die Syntax des Befehls hier

Hilft Dir das weiter?
Cheers
Winfried
aktuell: LO 5.3.5.2 30m0(Build:2) SUSE rpm, unter Linux openSuSE Leap 42.3 x86_64/KDE5
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
berndkli
*****
Beiträge: 289
Registriert: Di, 12.04.2005 22:05

Re: Zeitdifferenzen ausgeben

Beitrag von berndkli »

Hallo Peter

Du musst eine Abfrage erstellen, da kann Base rechnen.
Der folgende Code zeigt dir aus einer Tabelle "Uhrzeit" die Spalten "ZEIT_1", "ZEIT_2" und die erechneten "AE"s an. Es müssen immer die vollen Viertelstunden eingetragen werden (10:15, 11:30 usw.)

Code: Alles auswählen

SELECT "ZEIT_1", "ZEIT_2",DATEDIFF('mi',"ZEIT_1","ZEIT_2")/15 AS "AE" FROM "Uhrzeit"
Erstelle eine Abfrage in der SQL Ansicht,kopiere den Code hinein und passe den Tabellen- und die Spaltennamen an deine Gegebenheiten an.

Gruss Bernd
metalmessiah
Beiträge: 6
Registriert: Mo, 05.05.2008 11:46

Re: Zeitdifferenzen ausgeben

Beitrag von metalmessiah »

Guten Morgen!

Entschuldige die verspätete Antwort, aber in den letzten Tagen herrschte hier ein wenig das Chaos...
Viel Dank für den Code, so hab ich mir das vorgestellt. Ich werde das gleich mal ausprobieren und gebe dann Rückmeldung.
Nochmal vielen Dank, hier bekommt man echt schnell Hilfe.
metalmessiah
Beiträge: 6
Registriert: Mo, 05.05.2008 11:46

Re: Zeitdifferenzen ausgeben

Beitrag von metalmessiah »

Hallo!

Die Abfrage hat wunderbar funktioniert, danke.
Ich möchte aber immer noch die AE in meinem Bericht stehen haben. Ich probiere schon die ganze Zeit, funktioniert aber noch nicht.
berndkli
*****
Beiträge: 289
Registriert: Di, 12.04.2005 22:05

Re: Zeitdifferenzen ausgeben

Beitrag von berndkli »

Hallo

Was war denn bisher die Grundlage für den Bericht ?

Im Prinzip musst du eine Abfrage erstellen die die bisher erfassten Daten einschliest plus der Datediff Funktion. Diese Abfrage ist dann die Grundlage für den Bericht.

Gruss Bernd
metalmessiah
Beiträge: 6
Registriert: Mo, 05.05.2008 11:46

Re: Zeitdifferenzen ausgeben

Beitrag von metalmessiah »

Hallo !

Grundlage für meinen Bericht ist die Tabelle, in der meine Techniker, Datum, Uhrzeiten etc. verzeichnet sind.
Wie würde denn die Syntax für eine entsprechende Abfrage aussehen?
Vielleicht so : Select * from Tabelle UNION [die obige Datediff-Funktion] ???
Hab das schon mal probiert, aber irgendwas mach ich noch falsch. Bestimmt irgendeine Hochkomma-Regel, die ich noch nicht kenne...
Ich hab auch schon versucht, die Abfrage als Tabelle auszugeben (klappte auch) und dann mit dem Insert-Into-Befehl in meine eigentliche Mastertabelle reinzuladen. Da gibts aber auch nur Fehlermeldungen, obwohl ich mich an die Syntax halte. Blöd!
metalmessiah
Beiträge: 6
Registriert: Mo, 05.05.2008 11:46

Re: Zeitdifferenzen ausgeben

Beitrag von metalmessiah »

select * from Arbeitszettel2
UNION
SELECT "Beginn", "Ende", Datediff( 'mi', "Beginn", "Ende" ) / 15 AS "AE" FROM "Arbeitszettel2"

So sieht das bei mir aus. Jeder Befehl für sich allein funktioniert tadelos.
Zusammen kommt nur die Meldung "Table not found in Statement [..."
berndkli
*****
Beiträge: 289
Registriert: Di, 12.04.2005 22:05

Re: Zeitdifferenzen ausgeben

Beitrag von berndkli »

Hallo

Wenn du nur eine TAbelle hast brauchst du den UNION nicht. Die folgende Abfrage sollte funktionieren

Code: Alles auswählen

SELECT "Technikerspalte", "meinetwegennochneSpalte", "Beginn", "Ende", DATEDIFF('mi', "Beginn", "Ende" ) / 15 AS "AE" FROM "Arbeitszettel2" 
Gruss Bernd
metalmessiah
Beiträge: 6
Registriert: Mo, 05.05.2008 11:46

Re: Zeitdifferenzen ausgeben

Beitrag von metalmessiah »

Guten Morgen!!

Vielen Dank, die Abfrage hat super funktioniert. Jetzt läuft das so, wie ich es mir vorgestellt habe.
Anscheinend hab ich mit meinem Code viel zu kompliziert gedacht. Ich hätte nicht gedacht, dass es so simpel ist.
Nochmal vielen Dank ! Man kann euch hier getrost weiter empfehlen. Echt prima!

Gruß, Peter
berndkli
*****
Beiträge: 289
Registriert: Di, 12.04.2005 22:05

Re: Zeitdifferenzen ausgeben

Beitrag von berndkli »

Hallo Peter

Es hat mir keine Ruhe gelassen, dass man immer die vollen Viertelstunden eingeben muss.
Bei der folgenden Abfrage kann man die Zeiten eingeben wie man will - also 12:13 - 19:24 usw. - und es wird ab der 8ten Minute einer AE auf die nächste aufgerundet.

Code: Alles auswählen

SELECT "Technikerspalte","Beginn", "Ende", DATEDIFF( 'mi', "Beginn", "Ende" ) AS "Diff", 
CASEWHEN( MINUTE("Ende") - MINUTE("Beginn") >= 8 AND MINUTE("Ende") - MINUTE("Beginn") < 15 ,  DATEDIFF( 'mi', "Beginn", "Ende" ) / 15 +1, 
CASEWHEN( MINUTE("Ende") - MINUTE("Beginn") >= 23  AND MINUTE("Ende") - MINUTE("Beginn") < 30,  DATEDIFF( 'mi', "Beginn", "Ende" ) / 15 +1, 
CASEWHEN( MINUTE("Ende") - MINUTE("Beginn") >= 38  AND MINUTE("Ende") - MINUTE("Beginn") < 45,  DATEDIFF( 'mi', "Beginn", "Ende" ) / 15 +1, 
CASEWHEN( MINUTE("Ende") - MINUTE("Beginn") >= 53  AND MINUTE("Ende") - MINUTE("Beginn") < 60,  DATEDIFF( 'mi', "Beginn", "Ende" ) / 15 +1,
DATEDIFF( 'mi', "Beginn", "Ende" ) / 15 ))))  AS "AE" FROM "Arbeitszettel2"
Gruss Bernd
metalmessiah
Beiträge: 6
Registriert: Mo, 05.05.2008 11:46

Re: Zeitdifferenzen ausgeben

Beitrag von metalmessiah »

Guten Morgen, Berndkli !!

Meine Güte, da machst du dir um 2 Uhr früh noch Gedanken um das Problem...
Sehr nett, vielen Dank. Ich werde die Abfrage auf jeden Fall noch mit einbauen.
Allerdings hättest du dir gar nicht so viel Mühe machen müssen, da wir wir sowieso unsere Arbeitszeiten stets auf die volle Arbeitseinheit / Viertelstunde aufrunden müssen. Sind wir meinetwegen um 11:03 fertig, wird trotzdem 11:15 eingetragen. Das ist gängige Praxis, andere Dienstleister runden sogar auf die volle Stunde auf, was ehrlich gesagt eine Frechheit dem Kunden gegenüber ist.
Trotzdem freue ich mich sehr über die Abfrage, da ich so wieder etwas über Syntax und Ablauf von SQL-Befehlen gelernt habe.
Nochmal vielen Dank !!
Bis bald, Peter
Antworten