Hallo Markus,
Zitat von
Shivan:
Das ganze sollte eben performant sein, und deswegen mengenorientiert, so dass die Datenbank dabei möglichst die Arbeit erledigen kann und nicht alles auf Clientseite einzelsatzorientiert abläuft.
deine Motive sind gut und richtig, aber die Folgerung ist nicht zwingend. Einzelsatzverarbeitung im Client darf man nicht pauschal verurteilen - teuer wird es nur wenn für jeden Satz eine Anfrage an den Server gerichtet wird.
Deine Zeitleisten kannst du auch als Zeitintervalle begreifen. Nehmen wir an die Tabelle "Zeiten" hat die Spalten "Start" und "Ende". Beide Spalten sind vom Typ float (smalldatetime kann für Zeitarithmetik als Float-Wert interpretiert werden). Deine Schnittmenge mit dem rechts offenen Intervall [pstart, pende) ergibt sich dann etwa so:
SQL-Code:
/* p-code */
select
MaxFloat(pstart, start) as cstart,
MinFloat(pende, ende) as cende
from zeiten
where MinFloat(pende, ende) >= MaxFloat(pstart, start)
Dabei kann die Schnittmenge eine Menge von Intervallen sein. Eine passende UDF könnte so aussehen:
SQL-Code:
CREATE FUNCTION dbo.MaxFloat (
@value1 as float,
@value2 as float
)
RETURNS float
AS
BEGIN
DECLARE @result AS float
IF (@value1 > @value2)
set @result = @value1
ELSE
set @result = @value2
return @result
END
Grüße
marabu