Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Как определить количество строк ненулевых / 22 сообщений из 22, страница 1 из 1
06.07.2017, 09:36
    #39483555
lenysik
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как определить количество строк ненулевых
добрый день! Прошу помочь с запросом. Надо определить сколько дней был остаток не 0 по текущую дату

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
Дата	Товар	Остаток
25.06.2017	1	1
26.06.2017	1	1
27.06.2017	1	1
28.06.2017	1	0
29.06.2017	1	0
30.06.2017	1	1
01.07.2017	1	1
02.07.2017	1	1
03.07.2017	1	1
04.07.2017	1	1
05.07.2017	1	1
06.07.2017	1	1
25.06.2017	2	0
26.06.2017	2	0
27.06.2017	2	0
28.06.2017	2	0
29.06.2017	2	0
30.06.2017	2	1
01.07.2017	2	1
02.07.2017	2	1
03.07.2017	2	1
04.07.2017	2	0
05.07.2017	2	1
06.07.2017	2	1
Результатом будет являться
Код: plaintext
1.
2.
3.
Товар	Кол-во дней
1	7
2	2
Но если не было остатка, то дата может быть пропущена совсем.
Благодарю за помощь!
...
Рейтинг: 0 / 0
06.07.2017, 09:51
    #39483561
Kaban77
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как определить количество строк ненулевых
lenysik,

Думаю так:

Код: plsql
1.
2.
3.
4.
select Товар, count(*)
from table
where Остаток != 0
group by Товар
...
Рейтинг: 0 / 0
06.07.2017, 09:58
    #39483565
exp98
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как определить количество строк ненулевых
Kaban77, не, так только подсчёт кол-ва записей о наличии. Похоже, что нужно джойнить с полным календарём и по нему count(). У автора - возможны пропуски дат.
...
Рейтинг: 0 / 0
06.07.2017, 10:01
    #39483568
lenysik
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как определить количество строк ненулевых
Уточнение.
Непрерывный остаток не 0
Т.е. если где-то был 0, отсчет начинаем заново.
Если дата пропущена, то остаток 0
...
Рейтинг: 0 / 0
06.07.2017, 10:08
    #39483575
AmKad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как определить количество строк ненулевых
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
with s (dt, prod_id, balance) as (
select to_date('25.06.2017', 'dd.mm.yyyy') dt,    1    ,1 from dual union all
select to_date('26.06.2017', 'dd.mm.yyyy') dt,    1    ,1 from dual union all
select to_date('27.06.2017', 'dd.mm.yyyy') dt,    1    ,1 from dual union all
select to_date('28.06.2017', 'dd.mm.yyyy') dt,    1    ,0 from dual union all
select to_date('29.06.2017', 'dd.mm.yyyy') dt,    1    ,0 from dual union all
select to_date('30.06.2017', 'dd.mm.yyyy') dt,    1    ,1 from dual union all
select to_date('01.07.2017', 'dd.mm.yyyy') dt,    1    ,1 from dual union all
select to_date('02.07.2017', 'dd.mm.yyyy') dt,    1    ,1 from dual union all
select to_date('03.07.2017', 'dd.mm.yyyy') dt,    1    ,1 from dual union all
select to_date('04.07.2017', 'dd.mm.yyyy') dt,    1    ,1 from dual union all
select to_date('05.07.2017', 'dd.mm.yyyy') dt,    1    ,1 from dual union all
select to_date('06.07.2017', 'dd.mm.yyyy') dt,    1    ,1 from dual union all
select to_date('25.06.2017', 'dd.mm.yyyy') dt,    2    ,0 from dual union all
select to_date('26.06.2017', 'dd.mm.yyyy') dt,    2    ,0 from dual union all
select to_date('27.06.2017', 'dd.mm.yyyy') dt,    2    ,0 from dual union all
select to_date('28.06.2017', 'dd.mm.yyyy') dt,    2    ,0 from dual union all
select to_date('29.06.2017', 'dd.mm.yyyy') dt,    2    ,0 from dual union all
select to_date('30.06.2017', 'dd.mm.yyyy') dt,    2    ,1 from dual union all
select to_date('01.07.2017', 'dd.mm.yyyy') dt,    2    ,1 from dual union all
select to_date('02.07.2017', 'dd.mm.yyyy') dt,    2    ,1 from dual union all
select to_date('03.07.2017', 'dd.mm.yyyy') dt,    2    ,1 from dual union all
select to_date('04.07.2017', 'dd.mm.yyyy') dt,    2    ,0 from dual union all
select to_date('05.07.2017', 'dd.mm.yyyy') dt,    2    ,1 from dual union all
select to_date('06.07.2017', 'dd.mm.yyyy') dt,    2    ,1 from dual)
select prod_id, ls as dt_from, dt as dt_to, dt - ls + 1 as day_interval
from
   (select prod_id, dt, last_value(decode(lg, 1, dt) ignore nulls) over (partition by prod_id order by dt) ls
    from
       (select s.*,
        case when balance != 0 and lag(balance, 1, 0) over (partition by prod_id order by dt) = 0 then 1 else 0 end lg
        from s
        )
    )
where dt = to_date('06.07.2017', 'dd.mm.yyyy');

   PROD_ID DT_FROM             DT_TO               DAY_INTERVAL
---------- ------------------- ------------------- ------------
         1 30.06.2017 00:00:00 06.07.2017 00:00:00            7
         2 05.07.2017 00:00:00 06.07.2017 00:00:00            2

Затрач.время: 00:00:00.05
...
Рейтинг: 0 / 0
06.07.2017, 10:11
    #39483578
stax..
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как определить количество строк ненулевых
lenysikУточнение.
Непрерывный остаток не 0
Т.е. если где-то был 0, отсчет начинаем заново.
Если дата пропущена, то остаток 0

пропущенные даты остаток 0, ну и что, они ж Вам не нужны
с не <>0 даты неприривны (нет пропусков)?

нужен пример с пропущенными и что получить

....
stax
...
Рейтинг: 0 / 0
06.07.2017, 10:25
    #39483587
stax..
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как определить количество строк ненулевых
AmKad,
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
  1  with s (dt, prod_id, balance) as (
  2  select to_date('25.06.2017', 'dd.mm.yyyy') dt,    1    ,1 from dual union all
  3  select to_date('26.06.2017', 'dd.mm.yyyy') dt,    1    ,1 from dual union all
  4  --select to_date('27.06.2017', 'dd.mm.yyyy') dt,    1    ,1 from dual union all
  5  select to_date('28.06.2017', 'dd.mm.yyyy') dt,    1    ,0 from dual union all
  6  select to_date('29.06.2017', 'dd.mm.yyyy') dt,    1    ,0 from dual union all
  7  select to_date('30.06.2017', 'dd.mm.yyyy') dt,    1    ,1 from dual union all
  8  select to_date('01.07.2017', 'dd.mm.yyyy') dt,    1    ,1 from dual union all
  9  select to_date('02.07.2017', 'dd.mm.yyyy') dt,    1    ,1 from dual union all
 10  select to_date('03.07.2017', 'dd.mm.yyyy') dt,    1    ,1 from dual union all
 11  select to_date('04.07.2017', 'dd.mm.yyyy') dt,    1    ,1 from dual union all
 12  select to_date('05.07.2017', 'dd.mm.yyyy') dt,    1    ,1 from dual union all
 13  select to_date('06.07.2017', 'dd.mm.yyyy') dt,    1    ,1 from dual union all
 14  select to_date('25.06.2017', 'dd.mm.yyyy') dt,    2    ,0 from dual union all
 15  select to_date('26.06.2017', 'dd.mm.yyyy') dt,    2    ,0 from dual union all
 16  select to_date('27.06.2017', 'dd.mm.yyyy') dt,    2    ,0 from dual union all
 17  select to_date('28.06.2017', 'dd.mm.yyyy') dt,    2    ,0 from dual union all
 18  select to_date('29.06.2017', 'dd.mm.yyyy') dt,    2    ,0 from dual union all
 19  select to_date('30.06.2017', 'dd.mm.yyyy') dt,    2    ,1 from dual union all
 20  select to_date('01.07.2017', 'dd.mm.yyyy') dt,    2    ,1 from dual union all
 21  select to_date('02.07.2017', 'dd.mm.yyyy') dt,    2    ,1 from dual union all
 22  select to_date('03.07.2017', 'dd.mm.yyyy') dt,    2    ,1 from dual union all
 23  select to_date('04.07.2017', 'dd.mm.yyyy') dt,    2    ,0 from dual union all
 24  select to_date('05.07.2017', 'dd.mm.yyyy') dt,    2    ,1 from dual union all
 25  select to_date('06.07.2017', 'dd.mm.yyyy') dt,    2    ,1 from dual)
 26  select prod_id, ls as dt_from, dt as dt_to, dt - ls + 1 as day_interval
 27  from
 28     (select prod_id, dt, last_value(decode(lg, 1, dt) ignore nulls)
 29  over (partition by prod_id order by dt) ls
 30      from
 31         (select s.*,
 32          case when balance != 0 and lag(balance, 1, 0)
 33  over (partition by prod_id order by dt) = 0 then 1 else 0 end lg
 34          from s
 35          )
 36      )
 37* where dt = to_date('06.07.2017', 'dd.mm.yyyy')
SQL> /

   PROD_ID DT_FROM  DT_TO    DAY_INTERVAL
---------- -------- -------- ------------
         1 30.06.17 06.07.17            7
         2 05.07.17 06.07.17            2



чем не подходит 20617860 ?

....
stax
...
Рейтинг: 0 / 0
06.07.2017, 10:39
    #39483601
MaximaXXL
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как определить количество строк ненулевых
А если простой lead?

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
with t (td, id, cnt) as (
select to_date('25.06.2017','dd.mm.yyyy') , 1 ,	1 from dual union all
select to_date('26.06.2017','dd.mm.yyyy') , 1 ,	1 from dual union all
select to_date('27.06.2017','dd.mm.yyyy') , 1 ,	1 from dual union all
select to_date('28.06.2017','dd.mm.yyyy') , 1 ,	0 from dual union all
select to_date('29.06.2017','dd.mm.yyyy') , 1 ,	0 from dual union all
select to_date('30.06.2017','dd.mm.yyyy') , 1 ,	1 from dual union all
select to_date('01.07.2017','dd.mm.yyyy') , 1 ,	1 from dual union all
select to_date('02.07.2017','dd.mm.yyyy') , 1 ,	1 from dual union all
select to_date('03.07.2017','dd.mm.yyyy') , 1 ,	1 from dual union all
select to_date('04.07.2017','dd.mm.yyyy') , 1 ,	1 from dual union all
select to_date('05.07.2017','dd.mm.yyyy') , 1 ,	1 from dual union all
select to_date('06.07.2017','dd.mm.yyyy') , 1 ,	1 from dual union all
select to_date('25.06.2017','dd.mm.yyyy') , 2 ,	0 from dual union all
select to_date('26.06.2017','dd.mm.yyyy') , 2 ,	0 from dual union all
select to_date('27.06.2017','dd.mm.yyyy') , 2 ,	0 from dual union all
select to_date('28.06.2017','dd.mm.yyyy') , 2 ,	0 from dual union all
select to_date('29.06.2017','dd.mm.yyyy') , 2 ,	0 from dual union all
select to_date('30.06.2017','dd.mm.yyyy') , 2 ,	1 from dual union all
select to_date('01.07.2017','dd.mm.yyyy') , 2 ,	1 from dual union all
select to_date('02.07.2017','dd.mm.yyyy') , 2 ,	1 from dual union all
select to_date('03.07.2017','dd.mm.yyyy') , 2 ,	1 from dual union all
select to_date('04.07.2017','dd.mm.yyyy') , 2 ,	0 from dual union all
select to_date('05.07.2017','dd.mm.yyyy') , 2 ,	1 from dual union all
select to_date('06.07.2017','dd.mm.yyyy') , 2 ,	1 from dual )

select id, sum(cnt_0)
from (select id, case cnt when 0 then LEAD (td,1,trunc(sysdate)) over (ORDER BY id, td) -  td end cnt_0
      from t)
group by id

не знал что делать если 0 последнее значение и вставил по сегодня
...
Рейтинг: 0 / 0
06.07.2017, 10:44
    #39483608
AmKad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как определить количество строк ненулевых
stax..,

По предоставленным условиям задачи сделан вывод о том, баланс хранится на каждый день и нет необходимости джойна на календарь.
stax..чем не подходит 20617860 ?staxПосмотри внимательно на исходные данные автора и требуемый результат.
...
Рейтинг: 0 / 0
06.07.2017, 10:45
    #39483610
MaximaXXL
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как определить количество строк ненулевых
MaximaXXL,

Извинете - недочитал, задача решена не верно =(
...
Рейтинг: 0 / 0
06.07.2017, 10:45
    #39483611
stax..
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как определить количество строк ненулевых
MaximaXXLА если простой lead?

зачем? если пропуск все равно 0
даты идут подляд lead-dt==1

....
stax
...
Рейтинг: 0 / 0
06.07.2017, 10:53
    #39483622
MaximaXXL
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как определить количество строк ненулевых
MaximaXXL,

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
with t (td, id, cnt) as (
select to_date('25.06.2017','dd.mm.yyyy') , 1 ,	1 from dual union all
select to_date('26.06.2017','dd.mm.yyyy') , 1 ,	1 from dual union all
select to_date('27.06.2017','dd.mm.yyyy') , 1 ,	1 from dual union all
select to_date('28.06.2017','dd.mm.yyyy') , 1 ,	0 from dual union all
select to_date('29.06.2017','dd.mm.yyyy') , 1 ,	0 from dual union all
select to_date('30.06.2017','dd.mm.yyyy') , 1 ,	1 from dual union all
select to_date('01.07.2017','dd.mm.yyyy') , 1 ,	1 from dual union all
select to_date('02.07.2017','dd.mm.yyyy') , 1 ,	1 from dual union all
select to_date('03.07.2017','dd.mm.yyyy') , 1 ,	1 from dual union all
select to_date('04.07.2017','dd.mm.yyyy') , 1 ,	1 from dual union all
select to_date('05.07.2017','dd.mm.yyyy') , 1 ,	1 from dual union all
select to_date('06.07.2017','dd.mm.yyyy') , 1 ,	1 from dual union all
select to_date('25.06.2017','dd.mm.yyyy') , 2 ,	0 from dual union all
select to_date('26.06.2017','dd.mm.yyyy') , 2 ,	0 from dual union all
select to_date('27.06.2017','dd.mm.yyyy') , 2 ,	0 from dual union all
select to_date('28.06.2017','dd.mm.yyyy') , 2 ,	0 from dual union all
select to_date('29.06.2017','dd.mm.yyyy') , 2 ,	0 from dual union all
select to_date('30.06.2017','dd.mm.yyyy') , 2 ,	1 from dual union all
select to_date('01.07.2017','dd.mm.yyyy') , 2 ,	1 from dual union all
select to_date('02.07.2017','dd.mm.yyyy') , 2 ,	1 from dual union all
select to_date('03.07.2017','dd.mm.yyyy') , 2 ,	1 from dual union all
select to_date('04.07.2017','dd.mm.yyyy') , 2 ,	0 from dual union all
select to_date('05.07.2017','dd.mm.yyyy') , 2 ,	1 from dual union all
select to_date('06.07.2017','dd.mm.yyyy') , 2 ,	1 from dual )

select id, max(case when cnt = 0 then td end) dat_0, max(case when cnt != 0 then td end) dat_1, max(case when cnt != 0 then td end)-max(case when cnt = 0 then td end) days
      from t
group by id
having max(case when cnt != 0 then td end)-max(case when cnt = 0 then td end) >0
...
Рейтинг: 0 / 0
06.07.2017, 10:54
    #39483623
MaximaXXL
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как определить количество строк ненулевых
stax..MaximaXXLА если простой lead?

зачем? если пропуск все равно 0
даты идут подляд lead-dt==1

....
stax

Я потом написал - не ту задачу решал =)
...
Рейтинг: 0 / 0
06.07.2017, 10:59
    #39483630
AmKad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как определить количество строк ненулевых
MaximaXXL
Код: plsql
1.
2.
3.
4.
select id, max(case when cnt = 0 then td end) dat_0, max(case when cnt != 0 then td end) dat_1, max(case when cnt != 0 then td end)-max(case when cnt = 0 then td end) days
      from t
group by id
having max(case when cnt != 0 then td end)-max(case when cnt = 0 then td end) >0

А если по товару не было дня с нулевым остатком?
...
Рейтинг: 0 / 0
06.07.2017, 11:07
    #39483643
exp98
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как определить количество строк ненулевых
lenysikУточнение. Непрерывный остаток не 0. Т.е. если где-то был 0, отсчет начинаем заново. Если дата пропущена, то остаток 0 Забавно, что в эксэле формулами делается на раз.
...
Рейтинг: 0 / 0
06.07.2017, 11:09
    #39483647
MaximaXXL
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как определить количество строк ненулевых
AmKad,

nvl добавил
Код: plsql
1.
2.
3.
4.
select id, max(decode(cnt,0,td)) dat_0, max(case when cnt != 0 then td end) dat_1, max(case when cnt != 0 then td end)-nvl(max(case when cnt = 0 then td end),min(case when cnt != 0 then td end)) days
      from t
group by id
having max(case when cnt != 0 then td end)-nvl(max(case when cnt = 0 then td end),min(case when cnt != 0 then td end)) >0
...
Рейтинг: 0 / 0
06.07.2017, 11:12
    #39483651
AmKad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как определить количество строк ненулевых
exp98Забавно, что в эксэле формулами делается на раз.Вот и я своим аналитикам говорю - нечего меня по пустякам беспокоить, выгружайте себе в excel всю без малого миллиардную историю операций и колбасьте там свои балансы и прочие показатели, как хотите.
...
Рейтинг: 0 / 0
06.07.2017, 11:13
    #39483652
exp98
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как определить количество строк ненулевых
lenysikРезультатом будет являться
Код: plaintext
1.
2.
3.
Товар	Кол-во дней
1	7
2	2
Но если не было остатка, то дата может быть пропущена совсем. Правильно ли понимать, что нужна длина последнего ряда "1", заканчивающегося сегодня, даже если есть пропуски дат? Если заканчивается вчера, то ответ= 0?
...
Рейтинг: 0 / 0
06.07.2017, 11:14
    #39483653
MaximaXXL
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как определить количество строк ненулевых
lenysik,

уточни или лучше пример этой фразы
Но если не было остатка, то дата может быть пропущена совсем.
...
Рейтинг: 0 / 0
06.07.2017, 11:16
    #39483658
exp98
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как определить количество строк ненулевых
AmKad, как бывший ан-к интуичу, что данный ряд не длиннее 10 лет ) Но заказчик просит ...
...
Рейтинг: 0 / 0
06.07.2017, 15:27
    #39483907
lenysik
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как определить количество строк ненулевых
Всем спасибо!
Вот так у меня получилось

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
with tt as (
  select t.*
    ,sum(decode(остаток,0,1,0)) over (partition by Товар order by Дата desc) gr
   from (
    select 
          Товар
          , Дата
          , остаток   
      from  таб1 o    
  ) t
  )
  select Товар
  , count(case when gr=0 then 1 end ) count_day
  from tt
group by Товар
...
Рейтинг: 0 / 0
06.07.2017, 16:38
    #39483963
stax..
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как определить количество строк ненулевых
lenysik,

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
  1  with t (d, t, o) as (
  2  select to_date('25.06.2017', 'dd.mm.yyyy') dt,    1    ,1 from dual union all
  3  select to_date('26.06.2017', 'dd.mm.yyyy') dt,    1    ,1 from dual union all
  4  select to_date('27.06.2017', 'dd.mm.yyyy') dt,    1    ,1 from dual union all
  5  select to_date('28.06.2017', 'dd.mm.yyyy') dt,    1    ,0 from dual union all
  6  select to_date('29.06.2017', 'dd.mm.yyyy') dt,    1    ,0 from dual union all
  7  select to_date('30.06.2017', 'dd.mm.yyyy') dt,    1    ,1 from dual union all
  8  select to_date('01.07.2017', 'dd.mm.yyyy') dt,    1    ,1 from dual union all
  9  select to_date('02.07.2017', 'dd.mm.yyyy') dt,    1    ,1 from dual union all
 10  --select to_date('03.07.2017', 'dd.mm.yyyy') dt,    1    ,1 from dual union all
 11  select to_date('04.07.2017', 'dd.mm.yyyy') dt,    1    ,1 from dual union all
 12  select to_date('05.07.2017', 'dd.mm.yyyy') dt,    1    ,1 from dual union all
 13  select to_date('06.07.2017', 'dd.mm.yyyy') dt,    1    ,1 from dual union all
 14  select to_date('25.06.2017', 'dd.mm.yyyy') dt,    2    ,0 from dual union all
 15  select to_date('26.06.2017', 'dd.mm.yyyy') dt,    2    ,0 from dual union all
 16  select to_date('27.06.2017', 'dd.mm.yyyy') dt,    2    ,0 from dual union all
 17  select to_date('28.06.2017', 'dd.mm.yyyy') dt,    2    ,0 from dual union all
 18  select to_date('29.06.2017', 'dd.mm.yyyy') dt,    2    ,0 from dual union all
 19  select to_date('30.06.2017', 'dd.mm.yyyy') dt,    2    ,1 from dual union all
 20  select to_date('01.07.2017', 'dd.mm.yyyy') dt,    2    ,1 from dual union all
 21  select to_date('02.07.2017', 'dd.mm.yyyy') dt,    2    ,1 from dual union all
 22  select to_date('03.07.2017', 'dd.mm.yyyy') dt,    2    ,1 from dual union all
 23  select to_date('04.07.2017', 'dd.mm.yyyy') dt,    2    ,0 from dual union all
 24  select to_date('05.07.2017', 'dd.mm.yyyy') dt,    2    ,1 from dual union all
 25  select to_date('06.07.2017', 'dd.mm.yyyy') dt,    2    ,1 from dual)
 26  ,tt as (
 27    select t.*
 28      ,sum(decode(o,0,1,0)) over (partition by t order by d desc) gr
 29     from (
 30      select
 31            t
 32            , d
 33            , o
 34        from  t o
 35    ) t
 36    )
 37    select t
 38    , count(case when gr=0 then 1 end ) count_day
 39    from tt
 40* group by t
SQL> /

         T  COUNT_DAY
---------- ----------
         1          6
         2          2



задача посчитать непрырывные конечные еденички?

для 1 должно быть 3?

...
stax
...
Рейтинг: 0 / 0
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Как определить количество строк ненулевых / 22 сообщений из 22, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]