powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Как определить количество строк ненулевых
22 сообщений из 22, страница 1 из 1
Как определить количество строк ненулевых
    #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
Как определить количество строк ненулевых
    #39483561
Kaban77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
lenysik,

Думаю так:

Код: plsql
1.
2.
3.
4.
select Товар, count(*)
from table
where Остаток != 0
group by Товар
...
Рейтинг: 0 / 0
Как определить количество строк ненулевых
    #39483565
exp98
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kaban77, не, так только подсчёт кол-ва записей о наличии. Похоже, что нужно джойнить с полным календарём и по нему count(). У автора - возможны пропуски дат.
...
Рейтинг: 0 / 0
Как определить количество строк ненулевых
    #39483568
lenysik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Уточнение.
Непрерывный остаток не 0
Т.е. если где-то был 0, отсчет начинаем заново.
Если дата пропущена, то остаток 0
...
Рейтинг: 0 / 0
Как определить количество строк ненулевых
    #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
Как определить количество строк ненулевых
    #39483578
stax..
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
lenysikУточнение.
Непрерывный остаток не 0
Т.е. если где-то был 0, отсчет начинаем заново.
Если дата пропущена, то остаток 0

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

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

....
stax
...
Рейтинг: 0 / 0
Как определить количество строк ненулевых
    #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
Как определить количество строк ненулевых
    #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
Как определить количество строк ненулевых
    #39483608
Фотография AmKad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
stax..,

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

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

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

....
stax
...
Рейтинг: 0 / 0
Как определить количество строк ненулевых
    #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
Как определить количество строк ненулевых
    #39483623
MaximaXXL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
stax..MaximaXXLА если простой lead?

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

....
stax

Я потом написал - не ту задачу решал =)
...
Рейтинг: 0 / 0
Как определить количество строк ненулевых
    #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
Как определить количество строк ненулевых
    #39483643
exp98
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
lenysikУточнение. Непрерывный остаток не 0. Т.е. если где-то был 0, отсчет начинаем заново. Если дата пропущена, то остаток 0 Забавно, что в эксэле формулами делается на раз.
...
Рейтинг: 0 / 0
Как определить количество строк ненулевых
    #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
Как определить количество строк ненулевых
    #39483651
Фотография AmKad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
exp98Забавно, что в эксэле формулами делается на раз.Вот и я своим аналитикам говорю - нечего меня по пустякам беспокоить, выгружайте себе в excel всю без малого миллиардную историю операций и колбасьте там свои балансы и прочие показатели, как хотите.
...
Рейтинг: 0 / 0
Как определить количество строк ненулевых
    #39483652
exp98
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
lenysikРезультатом будет являться
Код: plaintext
1.
2.
3.
Товар	Кол-во дней
1	7
2	2
Но если не было остатка, то дата может быть пропущена совсем. Правильно ли понимать, что нужна длина последнего ряда "1", заканчивающегося сегодня, даже если есть пропуски дат? Если заканчивается вчера, то ответ= 0?
...
Рейтинг: 0 / 0
Как определить количество строк ненулевых
    #39483653
MaximaXXL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
lenysik,

уточни или лучше пример этой фразы
Но если не было остатка, то дата может быть пропущена совсем.
...
Рейтинг: 0 / 0
Как определить количество строк ненулевых
    #39483658
exp98
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AmKad, как бывший ан-к интуичу, что данный ряд не длиннее 10 лет ) Но заказчик просит ...
...
Рейтинг: 0 / 0
Как определить количество строк ненулевых
    #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
Как определить количество строк ненулевых
    #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
22 сообщений из 22, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Как определить количество строк ненулевых
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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