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

Как да пропуснете интервалите на припокриване в следната заявка, за да получите точното време за проследяване на ден

Това е проблем с "пропуски и острови". Фалшифицирах собствените си тестови данни (тъй като не предоставихте такива), но мисля, че работи. Ключовата интуиция е, че всички стойности в рамките на един и същ „остров“ (тоест непрекъснат интервал от време) ще имат същата разлика от колона row_number(). Ако искате малко вникване в това, направете необработен избор от IntervalsByDay cte (за разлика от подзаявката, която имам сега); това ще ви покаже изчислените острови (с начална и крайна точка).

едит:Не видях, че имаш цигулка при първото заобикаляне. Отговорът ми е променен, за да отразява вашите данни и желания резултат

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. Структурата на обекта се зарежда много бавно за първи път след всяка компилация

  2. Как да използвате SqlTransaction в C#

  3. Основна точка и стойност, разделена със запетая

  4. T SQL формат на заявка за изграждане на динамична таблица

  5. SQL Server Group по брой дата и час на час?