Гость
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Выборка чисел / 19 сообщений из 19, страница 1 из 1
29.11.2019, 15:01
    #39896438
Aleks Niches
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка чисел
Допустим есть таблица :

Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
ID   NUM  USER_ID
1    0      5
2    10     5
3    90     5
4    60     5
5    0      5
6    0      5
7    100    5
8    0      5
9    30     5
10   200    5



Как сделать выборку сколько раз NUM опускался и поднимался >=90. Как видите в данной таблице 3 раза. Мне нужно вывести этот count
...
Рейтинг: 0 / 0
29.11.2019, 15:07
    #39896442
dmdmdm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка чисел
Код: plsql
1.
case when num >= 90 then 1 else null end
...
Рейтинг: 0 / 0
29.11.2019, 15:09
    #39896445
Aleks Niches
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка чисел
dmdmdm
Код: plsql
1.
case when num >= 90 then 1 else null end




Чето ступил совсем, действительно. Спасибо вам
...
Рейтинг: 0 / 0
29.11.2019, 15:11
    #39896450
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка чисел
Aleks Niches
опускался … >=90
Переведи.

http://www.bugtraq.ru/forum/faq/general/smart-questions.html] RTFM
...
Рейтинг: 0 / 0
29.11.2019, 15:12
    #39896451
SY
SY
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка чисел
dmdmdm
Код: plsql
1.
case when num >= 90 then 1 else null end



Ну и сколько раз тогда поднимался >=90:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
ID   NUM  USER_ID
1    0      5
2    10     5
3    90     5
4    91     5
4    92     5
4    93     5



SY.
...
Рейтинг: 0 / 0
29.11.2019, 15:13
    #39896452
Aleks Niches
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка чисел
dmdmdm
Код: plsql
1.
case when num >= 90 then 1 else null end




Хотя если там

90
130
140
150
...

Всем присвоит 1
...
Рейтинг: 0 / 0
29.11.2019, 15:14
    #39896454
Aleks Niches
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка чисел
Elic
Aleks Niches
опускался … >=90
Переведи.

http://www.bugtraq.ru/forum/faq/general/smart-questions.html] RTFM


В смысле понижался и поднимался в пределах 90
...
Рейтинг: 0 / 0
29.11.2019, 15:19
    #39896458
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка чисел
Aleks Niches
В смысле понижался и поднимался в пределах 90
От чего ж ты такой косноязычный?

http://www.bugtraq.ru/forum/faq/general/smart-questions.html] RTFM
...
Рейтинг: 0 / 0
29.11.2019, 15:23
    #39896462
dmdmdm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка чисел
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
with t(id) as (select 1 from dual union all
  select 5 from dual union all
  select 10 from dual union all
  select 2 from dual union all
  select 3 from dual union all
  select 15 from dual union all
  select 25 from dual
)

select id, case when id >= 10 and LAG(id, 1, 0) OVER (order by rn) < 10 then 1 else 0 end cnt
  from (
select id, rownum rn from t
)
...
Рейтинг: 0 / 0
29.11.2019, 15:24
    #39896463
Stax
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка чисел
Aleks Niches,

если версия 12 и выше,
match_recognize,
там пример как-раз часть из Вашей задачки (W)

....
stax
...
Рейтинг: 0 / 0
29.11.2019, 15:27
    #39896465
Aleks Niches
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка чисел
dmdmdm
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
with t(id) as (select 1 from dual union all
  select 5 from dual union all
  select 10 from dual union all
  select 2 from dual union all
  select 3 from dual union all
  select 15 from dual union all
  select 25 from dual
)

select id, case when id >= 10 and LAG(id, 1, 0) OVER (order by rn) < 10 then 1 else 0 end cnt
  from (
select id, rownum rn from t
)



Спасибо вы гений , правда очень помогли
...
Рейтинг: 0 / 0
29.11.2019, 15:30
    #39896468
Stax
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка чисел
Aleks Niches,

сколько раз график пересекал линию на отметке 90,такая ф-ка подойдет?

если да, to lag/lead

....
stax
...
Рейтинг: 0 / 0
29.11.2019, 15:32
    #39896470
SY
SY
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка чисел
Код: 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.
WITH T(ID,NUM,USER_ID) AS (
SELECT 1,0,5 FROM DUAL UNION ALL
SELECT 2,10,5 FROM DUAL UNION ALL
SELECT 3,90,5 FROM DUAL UNION ALL
SELECT 4,60,5 FROM DUAL UNION ALL
SELECT 5,0,5 FROM DUAL UNION ALL
SELECT 6,0,5 FROM DUAL UNION ALL
SELECT 7,100,5 FROM DUAL UNION ALL
SELECT 8,0,5 FROM DUAL UNION ALL
SELECT 9,30,5 FROM DUAL UNION ALL
SELECT 10,200,5 FROM DUAL)
SELECT  COUNT(NUM1) LESS_THAN_90,
        COUNT(NUM2) GREATER_OR_EQUAL_90
  FROM  T
  MATCH_RECOGNIZE(
                  PARTITION BY USER_ID
                  ORDER BY ID
                  MEASURES LESS_THAN_90.NUM AS NUM1,
                           GREATER_OR_EQUAL_90.NUM AS NUM2
                  PATTERN(LESS_THAN_90+ | GREATER_OR_EQUAL_90+)
                  DEFINE LESS_THAN_90 AS NUM < 90,
                         GREATER_OR_EQUAL_90 AS NUM >=90
                 )
/

LESS_THAN_90 GREATER_OR_EQUAL_90
------------ -------------------
           3                   3

SQL> 
 



SY.
...
Рейтинг: 0 / 0
29.11.2019, 15:36
    #39896473
Stax
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка чисел
Aleks Niches

Спасибо вы гений , правда очень помогли

Код: 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.
  1  with t(id) as (select 1 from dual union all
  2    select 5 from dual union all
  3    select 15 from dual union all
  4    select 2 from dual union all
  5    select 3 from dual union all
  6    select 1 from dual union all
  7    select 2 from dual
  8  )
  9  select id, case when id >= 10 and LAG(id, 1, 0) OVER (order by rn) < 10 then 1 else 0 end cnt
 10    from (
 11  select id, rownum rn from t
 12* )
SQL> /

        ID        CNT
---------- ----------
         1          0
         5          0
        15          1
         2          0
         3          0
         1          0
         2          0

7 rows selected.


сколько раз NUM опускался и поднимался >=10? один или два (5-15, 15-2)?

....
stax
...
Рейтинг: 0 / 0
29.11.2019, 15:45
    #39896484
SY
SY
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка чисел
Stax

сколько раз NUM опускался и поднимался >=10? один или два (5-15, 15-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.
24.
25.
26.
WITH T(ID,NUM,USER_ID) AS (
SELECT 1,0,5 FROM DUAL UNION ALL
SELECT 2,15,5 FROM DUAL UNION ALL
SELECT 3,2,5 FROM DUAL UNION ALL
SELECT 4,3,5 FROM DUAL UNION ALL
SELECT 5,1,5 FROM DUAL UNION ALL
SELECT 6,2,5 FROM DUAL)
SELECT  COUNT(NUM1) LESS_THAN_10,
        COUNT(NUM2) GREATER_OR_EQUAL_10
  FROM  T
  MATCH_RECOGNIZE(
                  PARTITION BY USER_ID
                  ORDER BY ID
                  MEASURES LESS_THAN_10.NUM AS NUM1,
                           GREATER_OR_EQUAL_10.NUM AS NUM2
                  PATTERN(LESS_THAN_10+ | GREATER_OR_EQUAL_10+)
                  DEFINE LESS_THAN_10 AS NUM < 10,
                         GREATER_OR_EQUAL_10 AS NUM >=10
                 )
/

LESS_THAN_10 GREATER_OR_EQUAL_10
------------ -------------------
           2                   1

SQL> 



SY.
...
Рейтинг: 0 / 0
29.11.2019, 15:56
    #39896497
Stax
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка чисел
SY,

я не знаю как надо, Алексу виднее

+ еще надо уточнения для

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
SELECT 1,0,5  FROM DUAL UNION ALL
SELECT 2,10,5 FROM DUAL UNION ALL
SELECT 3,10,5 FROM DUAL UNION ALL
SELECT 4,10,5 FROM DUAL UNION ALL
SELECT 5,1,5  FROM DUAL UNION ALL
SELECT 6,10,5 FROM DUAL UNION ALL
SELECT 7,10,5 FROM DUAL UNION ALL
SELECT 8,10,5 FROM DUAL UNION ALL
SELECT 9,22,5 FROM DUAL)



.....
stax
...
Рейтинг: 0 / 0
29.11.2019, 16:04
    #39896500
Aleks Niches
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка чисел
Спасибо друзья, всем спасибо
...
Рейтинг: 0 / 0
29.11.2019, 16:31
    #39896517
SY
SY
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка чисел
Stax

+ еще надо уточнения для


Не понял для уточнения чего?

Код: 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.
WITH T(ID,NUM,USER_ID) AS (
SELECT 1,0,5  FROM DUAL UNION ALL
SELECT 2,10,5 FROM DUAL UNION ALL
SELECT 3,10,5 FROM DUAL UNION ALL
SELECT 4,10,5 FROM DUAL UNION ALL
SELECT 5,1,5  FROM DUAL UNION ALL
SELECT 6,10,5 FROM DUAL UNION ALL
SELECT 7,10,5 FROM DUAL UNION ALL
SELECT 8,10,5 FROM DUAL UNION ALL
SELECT 9,22,5 FROM DUAL)
SELECT  COUNT(NUM1) LESS_THAN_10,
        COUNT(NUM2) GREATER_OR_EQUAL_10
  FROM  T
  MATCH_RECOGNIZE(
                  PARTITION BY USER_ID
                  ORDER BY ID
                  MEASURES LESS_THAN_10.NUM AS NUM1,
                           GREATER_OR_EQUAL_10.NUM AS NUM2
                  PATTERN(LESS_THAN_10+ | GREATER_OR_EQUAL_10+)
                  DEFINE LESS_THAN_10 AS NUM < 10,
                         GREATER_OR_EQUAL_10 AS NUM >= 10
                 )
/

LESS_THAN_10 GREATER_OR_EQUAL_10
------------ -------------------
           2                   2

SQL> 



Ну а если через LAG:

Код: 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.
WITH T(ID,NUM,USER_ID) AS (
SELECT 1,0,5 FROM DUAL UNION ALL
SELECT 2,10,5 FROM DUAL UNION ALL
SELECT 3,90,5 FROM DUAL UNION ALL
SELECT 4,60,5 FROM DUAL UNION ALL
SELECT 5,0,5 FROM DUAL UNION ALL
SELECT 6,0,5 FROM DUAL UNION ALL
SELECT 7,100,5 FROM DUAL UNION ALL
SELECT 8,0,5 FROM DUAL UNION ALL
SELECT 9,30,5 FROM DUAL UNION ALL
SELECT 10,200,5 FROM DUAL),
T1 AS (
       SELECT  ID,
               NUM,
               USER_ID,
               CASE
                 WHEN NUM < 90 THEN 'LESS THAN 90'
                 ELSE 'GREATER OR EQUAL 90'
               END INTERVAL_NAME,
               CASE
                 WHEN NUM >= 90 AND LAG(NUM,1,0) OVER(PARTITION BY USER_ID ORDER BY ID) < 90 THEN 1
                 WHEN NUM < 90 AND LAG(NUM,1,90) OVER(PARTITION BY USER_ID ORDER BY ID) >= 90 THEN 1
               END START_OF_GROUP
         FROM  T
      )
SELECT  INTERVAL_NAME,
        COUNT(*) CNT
  FROM  T1
  WHERE START_OF_GROUP = 1
  GROUP BY INTERVAL_NAME
/

INTERVAL_NAME              CNT
------------------- ----------
LESS THAN 90                 3
GREATER OR EQUAL 90          3

SQL> 



SY.
...
Рейтинг: 0 / 0
29.11.2019, 16:38
    #39896522
Stax
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка чисел
SY

Не понял для уточнения чего?
SY.


несколько 90 (10) подряд, ето один раз?

ps
я так понял результат селекта одно (не два) число ("Как видите в данной таблице 3 раза.")

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


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