Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Anwenden eines rekursiven CTE auf gruppierte Tabellenzeilen (SQL Server 2005)

Einige Dinge zum Ausprobieren

  • Anstatt sich allen anzuschließen Zeile und Filtern der Ergebnisse in Ihrer where-Klausel, könnten Sie versuchen, ob die Reduzierung der Anzahl der Datensätze direkt im Join die Dinge beschleunigt?
  • Fügen Sie einen abdeckenden Index für PersonKey, RoomKey, CheckOut &Row hinzu und sehen Sie, ob es die Leistung verbessert.

SQL-Anweisung

;with CTE (PERSONKEY, ROOMKEY, CHECKIN, CHECKOUT, ROW)
as (select RU.PERSONKEY,
           RU.ROOMKEY, 
           RU.CHECKIN,
           RU.CHECKOUT,
           RU.ROW
    from ROOMUSAGE RU
    where RU.ROW = 1

    union all

    select RU.PERSONKEY,
           RU.ROOMKEY, 
           RU.CHECKIN,
           RU.CHECKOUT,
           RU.ROW
    from ROOMUSAGE RU 
         inner join CTE on CTE.ROW + 1 = RU.ROW
                           and CTE.CHECKIN = RU.CHECKOUT
                           and CTE.PERSONKEY = RU.PERSONKEY
                           and CTE.ROOMKEY = RU.ROOMKEY
)