Zeitspannen zur Tarifermittlung in Abschnitte unterteilen?
Zeitspannen zur Tarifermittlung in Abschnitte unterteilen?
am 17.01.2007 00:58:41 von Christian Hammers
Hallo
Ich habe eine Tabelle mit Zeitabschnitten, also
start datetime not null,
end datetime not null
pro Zeile und möchte nun ermitteln, wieviel Zeit insgesamt
zwischen 09:00h und 17:00h bzw im allgemeineren Fall in beliebigen
Tarifzeitabschnitten lag.
Lösungen in denen ich jede Zeile auslese und den Rest in einer
Programmiersprache erledige, habe ich schon, das selbe mit=20
STORED PROCEDURES bekäme ich folglich auch noch hin, aber irgendwie
habe ich das Gefühl, daß man das auch mit "MySQL-4.1 Niveau" lösen
könnte :) Ideen?
tschüss,
-christian-
Re: Zeitspannen zur Tarifermittlung in Abschnitte unterteilen?
am 17.01.2007 08:31:49 von Andreas Kretschmer
Andreas
--
Andreas Kretschmer
Linux - weil ich es mir wert bin!
GnuPG-ID 0x3FFF606C http://wwwkeys.de.pgp.net
Deutsche PostgreSQL User Group: http://pgug.de
Re: Zeitspannen zur Tarifermittlung in Abschnitte unterteilen?
am 17.01.2007 09:41:57 von Claus Reibenstein
Christian Hammers schrieb:
> Ich habe eine Tabelle mit Zeitabschnitten, also
> start datetime not null,
> end datetime not null
> pro Zeile und möchte nun ermitteln, wieviel Zeit insgesamt
> zwischen 09:00h und 17:00h bzw im allgemeineren Fall in beliebigen
> Tarifzeitabschnitten lag.
SELECT end-start ...
GruÃ. Claus
--
,~°O O
O ,´ / |/|\
/ |¯`. Das neue Hochzeits-Branchenbuch im Internet ,´ / | |\
/__| `~...............................................~´ /___|/ /
Re: Zeitspannen zur Tarifermittlung in Abschnitte unterteilen?
am 17.01.2007 15:04:10 von Benjamin Billian
Christian Hammers wrote:
> Ich habe eine Tabelle mit Zeitabschnitten, also
> start datetime not null,
> end datetime not null
> pro Zeile und möchte nun ermitteln, wieviel Zeit insgesamt
> zwischen 09:00h und 17:00h bzw im allgemeineren Fall in beliebigen
> Tarifzeitabschnitten lag.
SELECT SUM(...) FROM tabelle WHERE
start > 9:00 AND
stop < 17:00
GROUP BY ...
Das wär' die Summe aller "Gespräche" die genau im Zeitraum geführ wurden.
SELECT SUM(...) FROM tabelle WHERE
start BETWEEN 9:00 AND 17:00 OR
stop BETWEEN 9:00 AND 17:00
GROUP BY ...
Das wär' dann die Summe aller Gespräche bei denen ein Teil innerhalb des
Tarifes liegt.
SUM (LEAST (end, 17:00) - GREATEST (start, 9:00))
Und das sollte doch helfen nur ab 9:00Uhr bis 17:00Uhr aufzusummieren.
Alles nicht getestet und natürlich nur Pseudocode. Um die korrekte
Umrechnung der Zeiten wollte ich mich jetzt nicht kümmern. War nur ein
spontaner Einfall.
Pass auf falls ein Gespräch länger als 24h dauert, dass auch die
komplette Zeitspanne berechnet wird.
MfG, Benjamin
Re: Zeitspannen zur Tarifermittlung in Abschnitte unterteilen?
am 17.01.2007 15:38:09 von Robert Klemme
On 17.01.2007 15:04, Benjamin Billian wrote:
> Christian Hammers wrote:
>> Ich habe eine Tabelle mit Zeitabschnitten, also
>> start datetime not null,
>> end datetime not null
>> pro Zeile und möchte nun ermitteln, wieviel Zeit insgesamt
>> zwischen 09:00h und 17:00h bzw im allgemeineren Fall in beliebigen
>> Tarifzeitabschnitten lag.
>
> SELECT SUM(...) FROM tabelle WHERE
> start > 9:00 AND
> stop < 17:00
> GROUP BY ...
>
> Das wär' die Summe aller "Gespräche" die genau im Zeitraum geführ wurden.
>
>
> SELECT SUM(...) FROM tabelle WHERE
> start BETWEEN 9:00 AND 17:00 OR
> stop BETWEEN 9:00 AND 17:00
> GROUP BY ...
>
> Das wär' dann die Summe aller Gespräche bei denen ein Teil innerhalb des
> Tarifes liegt.
>
>
> SUM (LEAST (end, 17:00) - GREATEST (start, 9:00))
>
> Und das sollte doch helfen nur ab 9:00Uhr bis 17:00Uhr aufzusummieren.
>
>
> Alles nicht getestet und natürlich nur Pseudocode. Um die korrekte
> Umrechnung der Zeiten wollte ich mich jetzt nicht kümmern. War nur ein
> spontaner Einfall.
> Pass auf falls ein Gespräch länger als 24h dauert, dass auch die
> komplette Zeitspanne berechnet wird.
Es gibt noch weitere mögliche Interpretationen der Anforderung:
select sum(end - start)
from tab
where start >= 09:00
and end <= 17:00
and start_and_end_on_same_day
select sum(end - start)
from tab
where start > 09:00
and end < 17:00
and start_and_end_on_same_day
Oder sogar über mehrere Tage...
select sum(end - start)
from tab
where start >= 09:00
and end <= 17:00
select sum(end - start)
from tab
where start > 09:00
and end < 17:00
:-)
robert