Benutzer-definierte ranking - / Video-Analyse-Funktionen in SQL Server 2008

Ich bin der Planung einer data warehouse-migration zu SQL Server 2008, und versuchen zu denken, von Möglichkeiten, um zu replizieren, LAG, LEAD, FIRST_VALUE und LAST_VALUE analytische Funktionen von Oracle, in SQL Server 2008. Sie sind nicht in SQL Server 2008, obwohl die grundlegenden Mechanismen für Fenster-analytische Funktionen (z.B. ROW_NUMBER, RANK und DENSE_RANK sind alle vorhanden).

Für diese Funktionen ist es möglich, zur Erzielung der gleichen Funktion durch erstellen einer Unterabfrage, weist jede Zeile eine Zahl mit ROW_NUMBER und dann tut self-joins, die Abfrage von verknüpften Zeilen mit in der Nähe Zeilennummern (für die LAG und LEAD), oder eine Zeile Zahl 1 (für FIRST_VALUE).

Ich erwarte, dass zu tun, die self-joins beeinträchtigt die Effizienz eines Vorgangs: aber ich weiß noch nicht über einen SQL-Server zu testen. So, ohne die eigentlich beurteilt die Leistung, Frage ich mich, ob es eine bessere Lösung, die vermeidet, dass die self-joins.

Blick auf die Dokumentation für benutzerdefinierte Aggregatfunktionen, ist es denkbar, dass die gleichen code-Struktur verwendet werden könnte, um die Bereitstellung von Benutzer-definierten analytischen Funktionen.

Also meine Frage ist: können Sie fügen Sie ein OVER () - Klausel, nach der eine benutzerdefinierte Aggregatfunktion haben es genannt, wie eine analytische Funktion?

Wenn dem so ist, ist die Terminate () - Methode aufgerufen, einmal pro Zeile? Gibt es etwas besonderes benötigt, um sicherzustellen, dass Zeilen, die gesendet werden, um Ihre UDF-Datei in die Bestellung angegeben in der OVER () - Klausel?

InformationsquelleAutor William Rose | 2009-11-16

Schreibe einen Kommentar