Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Nhóm các hàng liên tiếp có cùng giá trị sử dụng khoảng thời gian

Nếu bạn đang sử dụng SQLServer 2012 trở lên, bạn có thể sử dụng LAG để lấy giá trị trước đó của một cột, sau đó SUM() OVER (ORDER BY ...) để tạo tổng luân phiên, trong trường hợp này là tổng thay đổi Tên khóa học, có thể được sử dụng làm GROUP BY neo

With A AS (
  SELECT ClassRoom
       , CourseName
       , StartTime
       , EndTime
       , PrevCourse = LAG(CourseName, 1, CourseName) OVER (ORDER BY StartTime)
  FROM   Table1
), B AS (
  SELECT ClassRoom
       , CourseName
       , StartTime
       , EndTime
       , Ranker = SUM(CASE WHEN CourseName = PrevCourse THEN 0 ELSE 1 END)
                OVER (ORDER BY StartTime, CourseName)
  FROM   A
)
SELECT ClassRoom
     , CourseName
     , MIN(StartTime) StartTime
     , MAX(EndTime) EndTime
FROM   B
GROUP BY ClassRoom, CourseName, Ranker
ORDER BY StartTime

Bản trình diễn SQLFiddle



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. TODATETIMEOFFSET () Ví dụ trong SQL Server

  2. Khắc phục “tên hồ sơ không hợp lệ” khi gửi thư từ máy chủ SQL

  3. Lấy dữ liệu từ quy trình được lưu trữ với Entity Framework

  4. Cách định dạng số dưới dạng tiền tệ trong SQL Server (T-SQL)

  5. Tôi có thể sử dụng Tư cách thành viên ASP.NET với SQL Server Compact Edition không?