powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Помогите сделать запрос.
10 сообщений из 10, страница 1 из 1
Помогите сделать запрос.
    #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
Помогите сделать запрос.
    #39755781
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
STFF start_of_group
...
Рейтинг: 0 / 0
Помогите сделать запрос.
    #39755793
Рогафип
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Piastry,

Простите, я вот не понял.
1. Что есть "непрерывный процесс" ? В исходной таблице только операции и категории процессов.
2. При смене категории процесса с 2 на 1 и с 1 на 3 значение в третьей колонке не меняется. А при смене с 3 на 1 внезапно меняется...
Каков критерий ?
...
Рейтинг: 0 / 0
Помогите сделать запрос.
    #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
Помогите сделать запрос.
    #39755797
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
РогафипЧто есть "непрерывный процесс"Неизменность id_p
РогафипКаков критерий ?Номер непрерывной последовательности этого id_p.
...
Рейтинг: 0 / 0
Помогите сделать запрос.
    #39755798
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IMNOКакое n будет в данном случае?

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

Это первое вхождение пятёрок.
...
Рейтинг: 0 / 0
Помогите сделать запрос.
    #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
Помогите сделать запрос.
    #39755825
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IMNOСмотрю я на вторую таблицу и не могу понять по какому условию формируется 3 третий столбец.



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

.....
stax
...
Рейтинг: 0 / 0
Помогите сделать запрос.
    #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
Помогите сделать запрос.
    #39755944
Piastry
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Извините за предыдущее сообщение. Вопрос снимается.
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Помогите сделать запрос.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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