Гость
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Найти среди по сгруппированным полям вторую строчку, но если там только одна то вывести её / 7 сообщений из 7, страница 1 из 1
18.06.2021, 00:42
    #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
18.06.2021, 01:51
    #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
18.06.2021, 08:39
    #40078470
Stax
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Найти среди по сгруппированным полям вторую строчку, но если там только одна то вывести её
Для

TABLE_X_ID A TYPE_TABLE_X N8000111111380001111113800011111136000111111560001111115

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

.....
stax
...
Рейтинг: 0 / 0
18.06.2021, 10:49
    #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
18.06.2021, 11:48
    #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
18.06.2021, 21:59
    #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
18.06.2021, 22:31
    #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
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Найти среди по сгруппированным полям вторую строчку, но если там только одна то вывести её / 7 сообщений из 7, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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