powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Запросы
3 сообщений из 3, страница 1 из 1
Запросы
    #40028275
Martini45
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
есть таблица
column1 - дата в формате dd.mm.yyyy
column2 - значения чисел
column3 - значения да/нет

column1 | column2 | column3
01.05.20 1 да
02.05.20 2 нет
03.05.20 3 нет

02.06.20 1 да
03.06.20 1 да
04.06.20 2 да


нужно
1) количество смен значений в столбце column2 для каждого месяца
то есть должно быть
05 2
06 1

2)количество уникальных значений в столбце column2 для каждого месяца
05 3
06 2

3) количество "да", только если их количество больше 50% для каждого месяца
05 -
06 3

помоги разобраться пожалуйста(
...
Рейтинг: 0 / 0
Запросы
    #40028302
dmdmdm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1.

Код: 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.
with t as (
    select date '2020-05-01' d, 1 n, 'да' s from dual union all
    select date '2020-05-02', 2, 'нет' from dual union all
    select date '2020-05-03', 2, 'нет' from dual union all
    select date '2020-05-05', 3, 'нет' from dual union all

    select date '2020-06-02', 1, 'да' from dual union all
    select date '2020-06-03', 1, 'да' from dual union all
    select date '2020-06-04', 2, 'да' from dual
)

--select trunc(d, 'month') m, count(diff)  from (
select d, n, s, lagd, 
       case
         when lagn is null then NULL
           --n = nvl(lagn, -999)
         when n = lagn then NULL
         else 1
       end diff
from (
select d, n, s,
       lag(d) over (partition by trunc(d, 'month') order by d) as lagd,
       lag(n) over (partition by trunc(d, 'month') order by d) as lagn
from  t
     )
order by d
--) group by trunc(d, 'month') order by 1;

...
Рейтинг: 0 / 0
Запросы
    #40028364
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Martini45,

что не получается, на чем затык?

Код: 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.
SQL> ed
Wrote file afiedt.buf

  1  with t as (
  2      select date '2020-05-01' d, 1 n, 'да' s from dual union all
  3      select date '2020-05-02', 2, 'нет' from dual union all
  4      select date '2020-05-03', 2, 'нет' from dual union all
  5      select date '2020-05-05', 3, 'нет' from dual union all
  6      select date '2020-06-02', 1, 'да' from dual union all
  7      select date '2020-06-03', 1, 'да' from dual union all
  8      select date '2020-06-04', 2, 'да' from dual
  9  )
 10  select trunc(d, 'month') mmyy, sum(l) diff
 11  from (
 12    select t.*
 13    ,decode(lead(n,1,n) over (partition by trunc(d, 'month') order by d),n,0,1) l
 14  from t)
 15* group by trunc(d, 'month')
SQL> /

MMYY             DIFF
---------- ----------
01.06.2020          1
01.05.2020          2


Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
SQL> ed
Wrote file afiedt.buf

  1  with t as (
  2      select date '2020-05-01' d, 1 n, 'да' s from dual union all
  3      select date '2020-05-02', 2, 'нет' from dual union all
  4      select date '2020-05-03', 2, 'нет' from dual union all
  5      select date '2020-05-05', 3, 'нет' from dual union all
  6      select date '2020-06-02', 1, 'да' from dual union all
  7      select date '2020-06-03', 1, 'да' from dual union all
  8      select date '2020-06-04', 2, 'да' from dual
  9  )
 10  select trunc(d, 'month') mmyy, count(unique n) cnt
 11  from t
 12* group by trunc(d, 'month')
SQL> /

MMYY              CNT
---------- ----------
01.06.2020          2
01.05.2020          3

SQL>


Код: 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.
SQL> set null "-"

SQL> ed
Wrote file afiedt.buf

  1  with t as (
  2      select date '2020-05-01' d, 1 n, 'да' s from dual union all
  3      select date '2020-05-02', 2, 'нет' from dual union all
  4      select date '2020-05-03', 2, 'нет' from dual union all
  5      select date '2020-05-05', 3, 'нет' from dual union all
  6      select date '2020-06-02', 1, 'да' from dual union all
  7      select date '2020-06-03', 1, 'да' from dual union all
  8      select date '2020-06-04', 2, 'да' from dual
  9  )
 10  select trunc(d, 'month') mmyy
 11   ,decode(greatest(count(decode(s,'да',1) )/count(*)*100,50),50,0+null,count(decode(s,'да',1))) cnt_y
 12  from t
 13  group by trunc(d, 'month')
 14* order by 1
SQL> /

MMYY            CNT_Y
---------- ----------
01.05.2020 -
01.06.2020          3



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


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