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

Обединяване на дублиращи се времеви записи в база данни

Опитайте това, ако можете да гарантирате, че всички начални и крайни дати са непрекъснати:

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. Кой е най-добрият начин за извличане на записи групово от SQL Server

  2. Подготвеният оператор не може да се изпълнява многократно с целочислени стойности

  3. Сума от минути между множество периоди от време

  4. Как да направите RAND() детерминистичен в SQL Server

  5. Намерете референтни обекти в SQL Server:sys.dm_sql_referencing_entities()