powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Выборка чисел
19 сообщений из 19, страница 1 из 1
Выборка чисел
    #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
Выборка чисел
    #39896442
dmdmdm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plsql
1.
case when num >= 90 then 1 else null end
...
Рейтинг: 0 / 0
Выборка чисел
    #39896445
Aleks Niches
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dmdmdm
Код: plsql
1.
case when num >= 90 then 1 else null end




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

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




Хотя если там

90
130
140
150
...

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

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


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

http://www.bugtraq.ru/forum/faq/general/smart-questions.html] RTFM
...
Рейтинг: 0 / 0
Выборка чисел
    #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
Выборка чисел
    #39896463
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Aleks Niches,

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

....
stax
...
Рейтинг: 0 / 0
Выборка чисел
    #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
Выборка чисел
    #39896468
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Aleks Niches,

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

если да, to lag/lead

....
stax
...
Рейтинг: 0 / 0
Выборка чисел
    #39896470
Фотография 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
Выборка чисел
    #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
Выборка чисел
    #39896484
Фотография 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
Выборка чисел
    #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
Выборка чисел
    #39896500
Aleks Niches
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо друзья, всем спасибо
...
Рейтинг: 0 / 0
Выборка чисел
    #39896517
Фотография 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
Выборка чисел
    #39896522
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SY

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


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

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

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


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