Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Aplicar um CTE recursivo em linhas de tabela agrupadas (SQL server 2005)


Algumas coisas para tentar
  • Em vez de participar com todos linha e filtrar os resultados em sua cláusula where, você poderia tentar se reduzir a quantidade de registros diretamente na junção acelera as coisas?
  • Adicione um índice de cobertura em PersonKey, RoomKey, CheckOut e Row e veja se melhora o desempenho.

Instrução SQL
;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
)