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

Hợp nhất các bản ghi thời gian trùng lặp trong cơ sở dữ liệu

Hãy thử điều này nếu bạn có thể đảm bảo rằng tất cả ngày bắt đầu và ngày kết thúc đều liên tục:

with  t1 as  --tag first row with 1 in a continuous time series
(
select t1.*, case when t1.column1=t2.column1 and t1.column2=t2.column2
                  then 0 else 1 end as tag
  from your_table t1
  left join your_table t2
    on t1.EmployeeId= t2.EmployeeId and dateadd(day,-1,t1.StartDate)= t2.EndDate
)
select t1.EmployeeId, t1.StartDate, 
       case when min(T2.StartDate) is null then null
            else dateadd(day,-1,min(T2.StartDate)) end as EndDate,
       t1.Column1, t1.Column2
  from (select t1.* from t1 where tag=1 ) as t1  -- to get StartDate
  left join (select t1.* from t1 where tag=1 ) as t2  -- to get a new EndDate
    on t1.EmployeeId= t2.EmployeeId and t1.StartDate < t2.StartDate
 group by t1.EmployeeId, t1.StartDate, t1.Column1,   t1.Column2


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Không thể liên kết số nhận dạng nhiều phần - SubQuery

  2. Bạn có thể gọi một dịch vụ web từ mã TSQL không?

  3. SQL Loại bỏ các hàng gần như trùng lặp

  4. chạy thủ tục được lưu trữ và trả về giá trị từ VBA

  5. Làm thế nào để kiểm tra chuỗi không rỗng và không rỗng trong máy chủ SQL?