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

Jak pominąć interwały nakładania się w następującym zapytaniu, aby uzyskać dokładny czas śledzenia w ciągu dnia

To jest problem „luk i wysp”. Sfałszowałem własne dane testowe (ponieważ nie podałeś żadnych), ale myślę, że to działa. Kluczową intuicją jest to, że wszystkie wartości w tej samej „wyspie” (czyli w ciągłym przedziale czasu) będą miały tę samą różnicę w porównaniu z kolumną row_number(). Jeśli chcesz mieć trochę wglądu w to, dokonaj surowego wyboru z IntervalsByDay cte (w przeciwieństwie do podzapytania, które mam teraz); to pokaże obliczone wyspy (z punktem początkowym i końcowym).

edit:Nie widziałem, że masz skrzypce za pierwszym razem. Moja odpowiedź została zmieniona, aby odzwierciedlić Twoje dane i pożądane wyniki

with i as (
    select datediff(minute, '2013-01-01', StartTime) as s,
        datediff(minute, '2013-01-01', EndTime) as e
    from #track
), brokenDown as (
    select distinct n.Number
    from i
    join dbadmin.dbo.Numbers as n
        on n.Number >= i.s
        and n.Number <= i.e
), brokenDownWithID as (
    select Number, Number - row_number() over(order by Number) as IslandID,
        cast(dateadd(minute, number, '2013-01-01') as date) as d
    from brokenDown
), IntervalsByDay as (
    select
        dateadd(minute, min(number), '2013-01-01') as [IntervalStart],
        dateadd(minute, max(number), '2013-01-01') as [IntervalEnd],
        d,
        max(Number) - min(Number) + 1 as [NumMinutes]
    from brokenDownWithID
    group by IslandID, d
)
select d, sum(NumMinutes) as NumMinutes
from IntervalsByDay
group by d
order by d



  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 — procedura składowana z instrukcją Select przy użyciu IN (@Variable_CommaDelimitedListOfIDS)

  2. Co sprawia, że ​​instrukcja SQL jest sargowalna?

  3. Różnica między użytkownikiem a loginem w SQL Server

  4. Które ustawienia zapewniają domyślny format daty i godziny programu SQL Server?

  5. SQL Server:Wstaw wyniki procedury składowanej do tabeli na podstawie parametrów