Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Прилагане на рекурсивен CTE върху групирани редове на таблица (SQL сървър 2005)

Някои неща, които да опитате

  • Вместо да се присъедините към всеки ред и филтриране на резултатите във вашата клауза where, можете ли да опитате дали намаляването на количеството записи директно в съединението ускорява нещата?
  • Добавете покриващ индекс на PersonKey, RoomKey, CheckOut &Row и вижте дали това подобрява производителността.

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
)



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да напиша динамични колони за заявки в редове в SQL Server?

  2. SQL група и сума по месеци - по подразбиране нула

  3. Уникална ли е колоната TimeStamp?

  4. PIVOT / UNPIVOT в SQL Server 2008

  5. Практичен избор на процесор за SQL Server 2014/2016 OLTP работни натоварвания