Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Scal zduplikowane rekordy czasowe w bazie danych

Spróbuj tego, jeśli możesz upewnić się, że wszystkie daty rozpoczęcia i zakończenia są ciągłe :

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. Prawidłowa wielkość liter/tytułów kolumny z tabelą wyjątków w SQL Server

  2. SQL Server 2008 Generowanie serii dat i godzin

  3. Łączysz wiersze zapytanych wyników według unikalnego identyfikatora?

  4. zmiana nazwy tabeli tymczasowej na fizyczną

  5. Jak mogę zobaczyć aktywne połączenia SQL Server?