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

Wykryj przerwy powyżej 30 minut w kolumnie sygnatury czasowej

Proste rozwiązanie przy użyciu wspólnego wyrażenia tabelowego. Porównaj z wydajnością kursora, jeśli masz co najmniej 1000 wierszy.

create table #tmp (Dt datetime)

insert into #tmp values 
('2015-07-15 15:01:21'),
('2015-07-15 15:17:44'), 
('2015-07-15 15:17:53'), 
('2015-07-15 15:18:34'), 
('2015-07-15 15:21:41'), 
('2015-07-15 15:58:12'), 
('2015-07-15 15:59:12'), 
('2015-07-15 16:05:12'),
('2015-07-15 17:02:12')

;with tbl as (
select dt, row_number() over(order by dt) rn
from #tmp
)
select t1.dt [from],t2.dt [to], datediff(minute,t1.dt,t2.dt) gap
from tbl t1 
inner join tbl t2 on t1.rn+1 = t2.rn
where datediff(minute,t1.dt,t2.dt) >30


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Znajdź wartość w dowolnym miejscu w bazie danych

  2. 4 funkcje do sformatowania liczby do 2 miejsc dziesiętnych w SQL Server

  3. Różnica między datą i godziną w sqlserver?

  4. Zresetuj źródło tożsamości po usunięciu rekordów w SQL Server

  5. Utwórz tabelę ról i członkostwa ASP.NET w mojej aplikacji