Einzelnen Beitrag anzeigen

marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#4

Re: Daten bitweise in Feld ablegen und später aggregieren?

  Alt 14. Jul 2006, 20:45
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
  Mit Zitat antworten Zitat