powered by simpleCommunicator - 2.0.50     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Найти среди по сгруппированным полям вторую строчку, но если там только одна то вывести её
7 сообщений из 7, страница 1 из 1
Найти среди по сгруппированным полям вторую строчку, но если там только одна то вывести её
    #40078450
your_frend
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
TABLE_X_ID A TYPE_TABLE_X N8000111111360001111115130001111299000111121010000122215120001222222110001222218500013331204000133312070001333218
таблица TABLE_X
Необходимо сгруппировав поля A , TYPE_TABLE_X найти вторую строку по величне поля TABLE_X_ID, но если по группировке только одна строка, то вывести её, при условии что поле N не равно не равно предыдущей строки как у

TABLE_X_ID =40001 и 50001

Код: 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.
select y.TABLE_X_ID, y.A, y.TYPE_TABLE_X, y.N  from 
(select 
 TABLE_X.A, 
 TABLE_X.TYPE_TABLE_X,
TABLE_X.TABLE_X_ID,
--x.TABLE_X_ID,
max(TABLE_X.TABLE_X_ID) OVER(PARTITION BY  TABLE_X.A, TABLE_X.TYPE_TABLE_X ) max_TABLE_X_ID
 , TABLE_X.N ,
   x.N  new_n
from  
    (
    select max(TABLE_X.TABLE_X_ID) OVER(PARTITION BY  TABLE_X.A, TABLE_X.TYPE_TABLE_X ) TABLE_X_ID, 
           --max(TABLE_X.TABLE_X_ID) TABLE_X_ID ,
           TABLE_X.A,
           TABLE_X.TYPE_TABLE_X
           ,  TABLE_X.n
           from TABLE_X
         -- group by  TABLE_X.A,   TABLE_X.TYPE_TABLE_X
           ) x,
   TABLE_X
   where 
   TABLE_X.A = x.A
   and TABLE_X.TYPE_TABLE_X = x.TYPE_TABLE_X
   and TABLE_X.TABLE_X_ID <> x.TABLE_X_ID
   and TABLE_X.N <> x.N
   order by  TABLE_X.A, 
 TABLE_X.TYPE_TABLE_X
 )y
 where y.MAX_TABLE_X_ID =y.TABLE_X_ID



При таком раскладе например выходит

TABLE_X_ID A TYPE_TABLE_X N 6000111111590001111210110001222218
А не хватает
100001 , 70001 потому что у них нет пары и их N само по себе уникально.
...
Рейтинг: 0 / 0
Найти среди по сгруппированным полям вторую строчку, но если там только одна то вывести её
    #40078454
Фотография Кобанчег
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
your_frend,

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
select *
  from (select t.*,
               row_number() over(partition by a, type_table_x order by table_x_id) rn,
               lead(n) over(partition by a, type_table_x order by table_x_id) next
          from t)
 where rn = 1
   and n <> nvl(next, n + 1)
 order by a, type_table_x, table_x_id
...
Рейтинг: 0 / 0
Найти среди по сгруппированным полям вторую строчку, но если там только одна то вывести её
    #40078470
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Для

TABLE_X_ID A TYPE_TABLE_X N8000111111380001111113800011111136000111111560001111115

второй кто будет?

.....
stax
...
Рейтинг: 0 / 0
Найти среди по сгруппированным полям вторую строчку, но если там только одна то вывести её
    #40078506
your_frend
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Простите, насчёт таблицы "t" не понял ни я, ни мой TOAD.
Кобанчег
your_frend,

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
select *
  from (select t.*,
               row_number() over(partition by a, type_table_x order by table_x_id) rn,
               lead(n) over(partition by a, type_table_x order by table_x_id) next
          from t)
 where rn = 1
   and n <> nvl(next, n + 1)
 order by a, type_table_x, table_x_id

...
Рейтинг: 0 / 0
Найти среди по сгруппированным полям вторую строчку, но если там только одна то вывести её
    #40078538
dmdmdm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plsql
1.
2.
3.
4.
5.
6.
with t (TABLE_X_ID,  A, TYPE_TABLE_X,  N)
as
(select 80001, 111, 1, 13 from dual union all
select 60001, 111, 1, 15 from dual union all
select 130001,  111, 2, 9 from dual
)
...
Рейтинг: 0 / 0
Найти среди по сгруппированным полям вторую строчку, но если там только одна то вывести её
    #40078777
your_frend
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Премного благодарен! То что надо!

Кобанчег
your_frend,

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
select *
  from (select t.*,
               row_number() over(partition by a, type_table_x order by table_x_id) rn,
               lead(n) over(partition by a, type_table_x order by table_x_id) next
          from t)
 where rn = 1
   and n <> nvl(next, n + 1)
 order by a, type_table_x, table_x_id

...
Рейтинг: 0 / 0
Найти среди по сгруппированным полям вторую строчку, но если там только одна то вывести её
    #40078792
your_frend
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Мне сегодня, почти, во сне приснился такой скрипт, короче тупо прямолинейно использовал union all

Код: 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.
select * from 
(select y.TABLE_X_ID, y.TYPE_TABLE_X, y.A, y.NEW_N  from 
(select 
 TABLE_X.A, 
 TABLE_X.TYPE_TABLE_X,
TABLE_X.TABLE_X_ID,
--x.TABLE_X_ID,
max(TABLE_X.TABLE_X_ID) OVER(PARTITION BY  TABLE_X.A, TABLE_X.TYPE_TABLE_X ) max_TABLE_X_ID
 , TABLE_X.N new_n
  -- , x.N 
from  
    (
    select max(TABLE_X.TABLE_X_ID) OVER(PARTITION BY  TABLE_X.A, TABLE_X.TYPE_TABLE_X )TABLE_X_ID,
           TABLE_X.A,
           TABLE_X.N,
           TABLE_X.TYPE_TABLE_X
           from TABLE_X
           ) x,
   TABLE_X
   where 
   TABLE_X.A = x.A
   and TABLE_X.TYPE_TABLE_X = x.TYPE_TABLE_X
   and TABLE_X.TABLE_X_ID <> x.TABLE_X_ID
   and table_x.n<>x.n
   order by  TABLE_X.A, 
 TABLE_X.TYPE_TABLE_X
 )y
 where y.MAX_TABLE_X_ID =y.TABLE_X_ID
 union 
  select TABLE_X.TABLE_X_ID, TABLE_X.TYPE_TABLE_X, TABLE_X.A, TABLE_X.N 
  
    from 
  (
    select 
           TABLE_X.A,
           TABLE_X.TYPE_TABLE_X
             from TABLE_X
             group by TABLE_X.A, TABLE_X.TYPE_TABLE_X
           having count(*)=1) x, TABLE_X
    where TABLE_X.A = x.A and TABLE_X.TYPE_TABLE_X = x.TYPE_TABLE_X)tb
    order by tb.A, tb.TYPE_TABLE_X
        ;
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Найти среди по сгруппированным полям вторую строчку, но если там только одна то вывести её
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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