Как выбрать интервалы времени с нулевыми значениями - PullRequest
0 голосов
/ 03 июня 2018

Мне нужно выбрать временные интервалы без (0) данных.Как это сделать в SQL?

Пример:

Time Data
10:00 0
10:15 0
10:30 1
10:45 0
11:00 12
11:15 0
11:30 0
11:45 0
12:00 7

Результат:

10:00 - 10:30
10:45 - 11:00
11:15 - 12:00

Ответы [ 2 ]

0 голосов
/ 03 июня 2018

Большинство СУБД поддерживают Оконные агрегаты :

with cte as 
 (
   select time, data,
      -- assign a new group number whenever it's not a zero
      -- = same number for a value and following zeroes
      sum(case when data = 0 then 0 else 1 end) 
          over (order by time desc -- start from the latest row
                rows unbounded preceding) as grp 
   from myTable
 ) 
select
   min(time), max(time)
from cte
group by 
   grp -- aggregate previous zeroes with the non-zero row
0 голосов
/ 03 июня 2018

Вам необходимо идентифицировать группы и затем агрегировать их по группам.

Простой способ - подсчитать количество ненулевых значений для каждого значения или после него.Это приводит к времени окончания:

select min(time), max(time)
from (select t.*,
             sum(case when data > 0 then 1 else 0 end) over (order by time desc) as grp
      from t
     ) t
group by grp
having min(data) = 0
order by min(time);

Здесь - это скрипта SQL.

Примечание: здесь используются оконные / аналитические функции, которые являются стандартным SQL, поддерживаемым большинством баз данных..

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...