![]() |
AW: zeitintervall abfrage
Das eine schließt doch das andere nicht aus. Dein AG will offenbar zu jeder Stunde einen Bericht über die Produktivität seiner Untergebenen, wie man das z.B. von gewissen Callcentern kennt, wo gleich der oder die Vorgesetzte anrauscht, wenn man nach dem Auflegen nicht sofort die nächste Nummer wählt. Das kannst du ihm doch liefern, auch wenn sich die Pause über die aktuelle Stunde hinauszieht. In diesem fall vermerkst du eben nur den Anteil der Pause, der sich noch innerhalb der Stunde befindet, um im nächsten Bericht den Rest der Pause mit einzubeziehen.
|
AW: zeitintervall abfrage
Das Problem ist -wie so oft- das die Datenstruktur eine Auswertung erschwert, wenn nicht sogar unmöglich macht. Am einfachsten wäre es, eine Tabelle aller Minutenzeiten des Tages zu nehmen und mit einer Intervaltabelle zu verknüpfen. Mal sehen
Hmm.
Code:
Liefert mir eine Tabelle mit Anfangs und Endzeit der Intervalle sowie der Information, ob das Interval Produktivzeit ist, oder nicht. Das mit dem 'case' geht in FB bestimmt anders.
select t1.Zeit as StartZeit
, t2.Zeit as EndZeit , case when t2.Zeit - t1.Zeit > 10 minuten then 0 else 1 end as Produktiv from Tabelle t1 join Tabelle t2 on t1.ID = t2.ID-1 Diese Tabelle nenne ich jetzt mal 'Intervalle'. Jetzt habe ich eine Tabelle mit einer Spalte, in der einfach alle Datum+Uhrzeiten je Minute drinstehen. Pro Tag sind das 1440 Einträge. Pro Jahr ca. 400.000. Diese Tabelle erstellen wir uns einmal und parken sie in der DB. Wir nennen sie MinutenZeiten. Nun liste ich mir für jede Minute des Tages auf, ob die Minute produktiv war oder nicht.
Code:
Cool. Fehlt noch das Aggregat
select m.Uhrzeit,
i.Produktiv from Minuten m join Intervalle i on m.Uhrzeit between i.StartZeit and i.EndZeit
Code:
Fast fertig. Denn die Auswertung berücksichtigt nicht Arbeitsbeginn und -Ende. Diese Zeiten werden als 'Unproduktiv' markiert. Aus der Intervalltabelle müsste man sich jetzt noch die kleineste StartZeit und die größte Endzeit des jeweiligen Tages nehmen und das im Aggregat berücksichtigen.
select DatePart(Stunde, m.Uhrzeit) as Stunde
, sum (Produktiv) as Produktiv , sum (1-Produktiv) as Unproduktiv from Minuten m join Intervalle i on m.Uhrzeit between i.StartZeit and i.EndZeit Group by DatePart(Stunde, m.Uhrzeit) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:59 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz