Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Помогите сделать запрос. / 10 сообщений из 10, страница 1 из 1
04.01.2019, 01:31
    #39755768
Piastry
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите сделать запрос.
Есть таблица в которой указаны id операции и id_p категории процесса. Выглядит она так:

id…...id_p
--- -----
1…...2
2…...2
3…...1
4…...1
5…...3
6…...1
7…...1
8…...4
9…...1
10….1

В третьем столбце необходимо пронумеровать непрерывный процесс в рамках одной категории. Должно получиться так:

id…...id_p…...n
--- ----- -------------
1…...2…….....1
2…...2…….....1
3…...1…….....1
4…...1…….....1
5…...3…….....1
6…...1…….....2
7…...1…….....2
8…...4…….....1
9…...1…….....3
10….1…….....3
...
Рейтинг: 0 / 0
04.01.2019, 07:34
    #39755781
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите сделать запрос.
STFF start_of_group
...
Рейтинг: 0 / 0
04.01.2019, 09:49
    #39755793
Рогафип
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите сделать запрос.
Piastry,

Простите, я вот не понял.
1. Что есть "непрерывный процесс" ? В исходной таблице только операции и категории процессов.
2. При смене категории процесса с 2 на 1 и с 1 на 3 значение в третьей колонке не меняется. А при смене с 3 на 1 внезапно меняется...
Каков критерий ?
...
Рейтинг: 0 / 0
04.01.2019, 09:51
    #39755795
IMNO
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите сделать запрос.
Смотрю я на вторую таблицу и не могу понять по какому условию формируется 3 третий столбец.

Код: sql
1.
2.
3.
4.
5.
6.
7.
id      id_p    n
3	1       1
4	1	1
6	1	2
7	1	2
9	1	3
10	1	3



Почему здесь группировка идёт по двум строкам? У Вас в условии ничего не сказано про две строки. Есть слово "непрерывный". Если предположить, что "непрерывный" это операции относящиеся к одной категории, то в таблице выше поле n должно быть одинаковым.
Можно больше подробностей про условие задачи? Что есть "непрерывный процесс"?

Какое n будет в данном случае?

Код: sql
1.
2.
3.
4.
id      id_p  n
11	5      
12	5
13	5
...
Рейтинг: 0 / 0
04.01.2019, 10:05
    #39755797
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите сделать запрос.
РогафипЧто есть "непрерывный процесс"Неизменность id_p
РогафипКаков критерий ?Номер непрерывной последовательности этого id_p.
...
Рейтинг: 0 / 0
04.01.2019, 10:06
    #39755798
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите сделать запрос.
IMNOКакое n будет в данном случае?

Код: sql
1.
2.
3.
4.
id      id_p  n
11	5      
12	5
13	5

Это первое вхождение пятёрок.
...
Рейтинг: 0 / 0
04.01.2019, 10:52
    #39755805
IMNO
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите сделать запрос.
Код: 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.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
WITH
  TMain AS(SELECT 1 AS ID, 2 AS ID_p
           FROM DUAL
           UNION ALL
           SELECT 2 AS ID, 2 AS ID_p
           FROM DUAL
           UNION ALL
           SELECT 3 AS ID, 1 AS ID_p
           FROM DUAL
           UNION ALL
           SELECT 4 AS ID, 1 AS ID_p
           FROM DUAL
           UNION ALL
           SELECT 5 AS ID, 3 AS ID_p
           FROM DUAL
           UNION ALL
           SELECT 6 AS ID, 1 AS ID_p
           FROM DUAL
           UNION ALL
           SELECT 7 AS ID, 1 AS ID_p
           FROM DUAL
           UNION ALL
           SELECT 8 AS ID, 4 AS ID_p
           FROM DUAL
           UNION ALL
           SELECT 9 AS ID, 1 AS ID_p
           FROM DUAL
           UNION ALL
           SELECT 10 AS ID, 1 AS ID_p
           FROM DUAL
           UNION ALL
           SELECT 11 AS ID, 5 AS ID_p
           FROM DUAL
           UNION ALL
           SELECT 12 AS ID, 5 AS ID_p
           FROM DUAL
           UNION ALL
           SELECT 13 AS ID, 5 AS ID_p
           FROM DUAL
           UNION ALL
           SELECT 14 AS ID, 6 AS ID_p
           FROM DUAL
           UNION ALL
           SELECT 15 AS ID, 5 AS ID_p
           FROM DUAL
           UNION ALL
           SELECT 16 AS ID, 5 AS ID_p
           FROM DUAL
           UNION ALL
           SELECT 17 AS ID, 5 AS ID_p
           FROM DUAL)
SELECT tab.id, tab.id_p,
       SUM(CASE
             WHEN id_p <> lag_ OR lag_ = 0
               THEN 1
             ELSE 0
           END)OVER(PARTITION BY tab.id_p ORDER BY tab.id)
FROM(SELECT t.*,
            LAG(t.id_p, 1, 0)OVER(ORDER BY t.id) AS lag_
     FROM TMain t) tab
ORDER BY tab.id      
...
Рейтинг: 0 / 0
04.01.2019, 12:20
    #39755825
Stax
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите сделать запрос.
IMNOСмотрю я на вторую таблицу и не могу понять по какому условию формируется 3 третий столбец.



імхо, номер повтора неподряд

.....
stax
...
Рейтинг: 0 / 0
04.01.2019, 20:03
    #39755943
Piastry
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите сделать запрос.
IMNO
Код: 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.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
WITH
  TMain AS(SELECT 1 AS ID, 2 AS ID_p
           FROM DUAL
           UNION ALL
           SELECT 2 AS ID, 2 AS ID_p
           FROM DUAL
           UNION ALL
           SELECT 3 AS ID, 1 AS ID_p
           FROM DUAL
           UNION ALL
           SELECT 4 AS ID, 1 AS ID_p
           FROM DUAL
           UNION ALL
           SELECT 5 AS ID, 3 AS ID_p
           FROM DUAL
           UNION ALL
           SELECT 6 AS ID, 1 AS ID_p
           FROM DUAL
           UNION ALL
           SELECT 7 AS ID, 1 AS ID_p
           FROM DUAL
           UNION ALL
           SELECT 8 AS ID, 4 AS ID_p
           FROM DUAL
           UNION ALL
           SELECT 9 AS ID, 1 AS ID_p
           FROM DUAL
           UNION ALL
           SELECT 10 AS ID, 1 AS ID_p
           FROM DUAL
           UNION ALL
           SELECT 11 AS ID, 5 AS ID_p
           FROM DUAL
           UNION ALL
           SELECT 12 AS ID, 5 AS ID_p
           FROM DUAL
           UNION ALL
           SELECT 13 AS ID, 5 AS ID_p
           FROM DUAL
           UNION ALL
           SELECT 14 AS ID, 6 AS ID_p
           FROM DUAL
           UNION ALL
           SELECT 15 AS ID, 5 AS ID_p
           FROM DUAL
           UNION ALL
           SELECT 16 AS ID, 5 AS ID_p
           FROM DUAL
           UNION ALL
           SELECT 17 AS ID, 5 AS ID_p
           FROM DUAL)
SELECT tab.id, tab.id_p,
       SUM(CASE
             WHEN id_p <> lag_ OR lag_ = 0
               THEN 1
             ELSE 0
           END)OVER(PARTITION BY tab.id_p ORDER BY tab.id)
FROM(SELECT t.*,
            LAG(t.id_p, 1, 0)OVER(ORDER BY t.id) AS lag_
     FROM TMain t) tab
ORDER BY tab.id      



Если предположить, что id и id_p находятся в разных таблицах, то n будет нумеровать значения внутри id_p. То есть мы получим результат:

1 2 1
2 2 2
3 1 1
4 1 2
5 3 1
6 1 1
7 1 2
8 4 1
9 1 1
10 1 2
11 5 1
12 5 2
13 5 3
14 6 1
15 5 1
16 5 2
17 5 3
...
Рейтинг: 0 / 0
04.01.2019, 20:08
    #39755944
Piastry
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите сделать запрос.
Извините за предыдущее сообщение. Вопрос снимается.
...
Рейтинг: 0 / 0
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Помогите сделать запрос. / 10 сообщений из 10, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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