powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / HELP! Сортировка по двум полям
17 сообщений из 17, страница 1 из 1
HELP! Сортировка по двум полям
    #39613309
AntonyChe
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброго времени суток, форумчане.
Прежде чем написать сюда - очень долго ломал голову, пользовался поиском, но к сожалению, не нашел рабочего примера по моей задаче.
Задача следующая, имеется таблица(прикрепляю)


Необходимо сгруппировать таблицу по 2 полям (filename и waybill_num) затем вывести с остальными полями.
distinct не подойдет, потому что он выпиливает уникальные значения, если применить к всей таблице то получится, что он всем полям смотреть будет - каждая запись уникальная.

Буду очень признателен, если поможете с решением данного вопроса.

Модератор: Вложение удалено.
...
Рейтинг: 0 / 0
HELP! Сортировка по двум полям
    #39613318
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AntonyCheНеобходимо сгруппировать таблицу по 2 полям (filename и waybill_num) затем вывести с остальными полями.Начни рисовать пример результата - поймёшь, какую херню хочешь.
...
Рейтинг: 0 / 0
HELP! Сортировка по двум полям
    #39613368
AntonyChe
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Elic,

На выходе достаточно отобразить WaybillNum, filename, vendor и дата по последнему объединенному значению.
...
Рейтинг: 0 / 0
HELP! Сортировка по двум полям
    #39613382
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AntonyChe,

Код: 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.
SQL> ed
Wrote file afiedt.buf

  1  with t (id,filename,waybill_num,staus) as (
  2  select 1,'1.xml',99,'R' from dual union all
  3  select 2,'1.xml',99,'E' from dual union all
  4  select 3,'1.xml',99,'Q' from dual union all
  5  select 4,'2.xml',99,'Q' from dual union all
  6  select 5,'3.xml',99,'R' from dual union all
  7  select 6,'3.xml',40,'V' from dual union all
  8  select 7,'4.xml',98,'Q' from dual union all
  9  select 8,'4.xml',98,'!' from dual union all
 10  select 9,'4.xml',99,'Q' from dual )
 11  select * from (
 12    select t.*,count(*) over (partition by filename,waybill_num) cc from t)
 13* where cc>1
SQL> /

        ID FILEN WAYBILL_NUM S         CC
---------- ----- ----------- - ----------
         1 1.xml          99 R          3
         2 1.xml          99 E          3
         3 1.xml          99 Q          3
         7 4.xml          98 Q          2
         8 4.xml          98 !          2



.....
stax
...
Рейтинг: 0 / 0
HELP! Сортировка по двум полям
    #39613383
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AntonyCheдата по последнему объединенному значению.RTFM Aggregate Functions (FAQ)
...
Рейтинг: 0 / 0
HELP! Сортировка по двум полям
    #39613392
AntonyChe
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Stax,

3.xml 40 тоже же уникальный.
но его нет.


А если значения самому не задавать, и их тысяча? Таблица динамична в план наполнения
...
Рейтинг: 0 / 0
HELP! Сортировка по двум полям
    #39613409
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AntonyCheStax,

3.xml 40 тоже же уникальный.
но его нет.


А если значения самому не задавать, и их тысяча? Таблица динамична в план наполнения

брал за основу Ваш селект с картинки, там count(*)>1, а для 3.xml 40 count(*)=1

задавать не надо, with для тестовых данных

у Вас with не будет и вместо t будет XXRST_TURBO...

для
Код: 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.
SQL> ed
Wrote file afiedt.buf

  1  with t (id,vendor,filename,waybill_num,staus,ceationdate) as (
  2  select 1,'Energo','1.xml',99,'R',date '2018-03-01' from dual union all
  3  select 2,'Energo','1.xml',99,'E',date '2018-03-02' from dual union all
  4  select 3,'Energo','1.xml',99,'Q',date '2018-03-03' from dual union all
  5  select 4,'Rozetka','2.xml',99,'Q',date '2018-03-04' from dual union all
  6  select 5,'Navagator','3.xml',99,'R',date '2018-03-05' from dual union all
  7  select 6,'Navagator','3.xml',40,'V',date '2018-03-06' from dual union all
  8  select 7,'Energo','4.xml',98,'Q',date '2018-03-07' from dual union all
  9  select 8,'Energo','4.xml',98,'!',date '2018-03-08' from dual union all
 10  select 9,'Energo','4.xml',99,'Q',date '2018-03-09' from dual )
 11* select * from t
SQL> /

        ID VENDOR    FILEN WAYBILL_NUM S CEATIOND
---------- --------- ----- ----------- - --------
         1 Energo    1.xml          99 R 01.03.18
         2 Energo    1.xml          99 E 02.03.18
         3 Energo    1.xml          99 Q 03.03.18
         4 Rozetka   2.xml          99 Q 04.03.18
         5 Navagator 3.xml          99 R 05.03.18
         6 Navagator 3.xml          40 V 06.03.18
         7 Energo    4.xml          98 Q 07.03.18
         8 Energo    4.xml          98 ! 08.03.18
         9 Energo    4.xml          99 Q 09.03.18

9 rows selected.

SQL>


что надо получить?

.....
stax
...
Рейтинг: 0 / 0
HELP! Сортировка по двум полям
    #39613424
AntonyChe
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Stax,


На мой селект, думаю не стоитт смотреть.

Интересует следующий результат:

Из:


id name sex data description
1 AAA M 31.01.18 blah
2 xxx w 22.01.17 blahhh
3 AAA M 31.01.18 blah
4 AAA M 31.01.14 dsfsdfsd
5 xxx w 02.02.01 xfdsfsf

Получить:
name sex data description
AAA M 31.01.18 blah
xxx w 22.01.17 blahhh
...
Рейтинг: 0 / 0
HELP! Сортировка по двум полям
    #39613444
Dshedoo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AntonyChe,

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
with q (id, name, sex, data, description) as (
select 1, 'AAA', 'M', to_date('31.01.2018','DD.MM.YYYY'), 'blah' from dual union all
select 2, 'xxx', 'w', to_date('22.01.2017','DD.MM.YYYY'), 'blahhh' from dual union all
select 3, 'AAA', 'M', to_date('30.01.2018','DD.MM.YYYY'), 'blah' from dual union all
select 4, 'AAA', 'M', to_date('31.01.2014','DD.MM.YYYY'), 'dsfsdfsd' from dual union all
select 5, 'xxx', 'w', to_date('02.02.2001','DD.MM.YYYY'), 'xfdsfsf' from dual)

select q.id, q.name, q.sex, q.data, q.description from q 
where not exists (select * from q q1 where q.name = q1.name and q.sex = q1.sex and q.data < q1.data)
...
Рейтинг: 0 / 0
HELP! Сортировка по двум полям
    #39613449
Dshedoo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dshedoo,

Но нам не нужен ID и ещё, если будет несколько записей с одной датой, то будут дубли.
Тогда можно заменить q.id, на distinct:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
with q (id, name, sex, data, description) as (
select 1, 'AAA', 'M', to_date('31.01.2018','DD.MM.YYYY'), 'blah' from dual union all
select 2, 'xxx', 'w', to_date('22.01.2017','DD.MM.YYYY'), 'blahhh' from dual union all
select 3, 'AAA', 'M', to_date('31.01.2018','DD.MM.YYYY'), 'blah' from dual union all
select 4, 'AAA', 'M', to_date('31.01.2014','DD.MM.YYYY'), 'dsfsdfsd' from dual union all
select 5, 'xxx', 'w', to_date('02.02.2001','DD.MM.YYYY'), 'xfdsfsf' from dual)

select distinct q.name, q.sex, q.data, q.description from q 
where not exists (select * from q q1 where q.name = q1.name and q.sex = q1.sex and q.data < q1.data)
...
Рейтинг: 0 / 0
HELP! Сортировка по двум полям
    #39613463
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мне кажется, у автора задача из разряда "взять первое попавшиеся" и побежать поставить в церковь свечку, что бы на проде не получилась ошибка "первое попавшиеся не попало"

IMHO

Т.е., что то типа такого ))) (надеюсь, у топик стартера хватит ума подумать, что данный селект делает)
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
 with t (id,filename,waybill_num,staus) as (
  select 1,'1.xml',99,'R' from dual union all
  select 2,'1.xml',99,'E' from dual union all
  select 3,'1.xml',99,'Q' from dual union all
  select 4,'2.xml',99,'Q' from dual union all
  select 5,'3.xml',99,'R' from dual union all
  select 6,'3.xml',40,'V' from dual union all
  select 7,'4.xml',98,'Q' from dual union all
  select 8,'4.xml',98,'!' from dual union all
  select 9,'4.xml',99,'Q' from dual )
  select * from (
    select t.*,row_number() over (partition by filename,waybill_num order by dbms_random.random ) as r from t)
 where r=1
 order by filename,waybill_num;
...
Рейтинг: 0 / 0
HELP! Сортировка по двум полям
    #39613514
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AntonyChe,

c дубликатами

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
SQL> ed
Wrote file afiedt.buf

  1  with q (id, name, sex, data, description) as (
  2  select 1, 'AAA', 'M', to_date('31.01.2018','DD.MM.YYYY'), 'blah' from dual union all
  3  select 2, 'xxx', 'w', to_date('22.01.2017','DD.MM.YYYY'), 'blahhh' from dual union all
  4  select 3, 'AAA', 'M', to_date('30.01.2018','DD.MM.YYYY'), 'blah' from dual union all
  5  select 4, 'AAA', 'M', to_date('31.01.2018','DD.MM.YYYY'), 'dsfsdfsd' from dual union all
  6  select 5, 'xxx', 'w', to_date('02.02.2001','DD.MM.YYYY'), 'xfdsfsf' from dual)
  7  select * from
  8    (select q.*,dense_rank() over (partition by name,sex order by data desc) r from q)
  9* where r=1
SQL> /

        ID NAM S DATA     DESCRIPT          R
---------- --- - -------- -------- ----------
         1 AAA M 31.01.18 blah              1
         4 AAA M 31.01.18 dsfsdfsd          1
         2 xxx w 22.01.17 blahhh            1

SQL>



......
stax
...
Рейтинг: 0 / 0
HELP! Сортировка по двум полям
    #39613520
Dshedoo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
StaxAntonyChe,

c дубликатами

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
SQL> ed
Wrote file afiedt.buf

  1  with q (id, name, sex, data, description) as (
  2  select 1, 'AAA', 'M', to_date('31.01.2018','DD.MM.YYYY'), 'blah' from dual union all
  3  select 2, 'xxx', 'w', to_date('22.01.2017','DD.MM.YYYY'), 'blahhh' from dual union all
  4  select 3, 'AAA', 'M', to_date('30.01.2018','DD.MM.YYYY'), 'blah' from dual union all
  5  select 4, 'AAA', 'M', to_date('31.01.2018','DD.MM.YYYY'), 'dsfsdfsd' from dual union all
  6  select 5, 'xxx', 'w', to_date('02.02.2001','DD.MM.YYYY'), 'xfdsfsf' from dual)
  7  select * from
  8    (select q.*,dense_rank() over (partition by name,sex order by data desc) r from q)
  9* where r=1
SQL> /

        ID NAM S DATA     DESCRIPT          R
---------- --- - -------- -------- ----------
         1 AAA M 31.01.18 blah              1
         4 AAA M 31.01.18 dsfsdfsd          1
         2 xxx w 22.01.17 blahhh            1

SQL>



......
stax

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
with q (id, name, sex, data, description) as (
  select 1, 'AAA', 'M', to_date('31.01.2018','DD.MM.YYYY'), 'blah' from dual union all
  select 2, 'xxx', 'w', to_date('22.01.2017','DD.MM.YYYY'), 'blahhh' from dual union all
  select 3, 'AAA', 'M', to_date('31.01.2018','DD.MM.YYYY'), 'blah' from dual union all
  select 4, 'AAA', 'M', to_date('31.01.2018','DD.MM.YYYY'), 'dsfsdfsd' from dual union all
  select 5, 'xxx', 'w', to_date('02.02.2001','DD.MM.YYYY'), 'xfdsfsf' from dual)
  select * from (
  select q.*,dense_rank() over (partition by name,sex order by data desc, dbms_random.value) r from q
  ) where r=1
...
Рейтинг: 0 / 0
HELP! Сортировка по двум полям
    #39613531
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dshedoo,

если чесно то про dbms_random.value не понял

без дублей, достаточно row_number

....
stax
...
Рейтинг: 0 / 0
HELP! Сортировка по двум полям
    #39613579
AntonyChe
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Stax, Спасибо

with q (id, name, sex, data, description) as (
select 1, 'AAA', 'M', to_date('31.01.2018','DD.MM.YYYY'), 'blah' from dual union all
select 2, 'xxx', 'w', to_date('22.01.2017','DD.MM.YYYY'), 'blahhh' from dual union all
select 3, 'AAA', 'M', to_date('31.01.2018','DD.MM.YYYY'), 'blah' from dual union all
select 4, 'AAA', 'M', to_date('31.01.2018','DD.MM.YYYY'), 'dsfsdfsd' from dual union all
select 5, 'xxx', 'w', to_date('02.02.2001','DD.MM.YYYY'), 'xfdsfsf' from dual)
select * from (
select q.*,dense_rank() over (partition by name,sex order by data desc, dbms_random.value) r from q
) where r=1
...
Рейтинг: 0 / 0
HELP! Сортировка по двум полям
    #39613608
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AntonyChe,

21250068

.....
stax
...
Рейтинг: 0 / 0
HELP! Сортировка по двум полям
    #39613834
Фотография Пылинка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid KudryavtsevМне кажется, у автора задача из разряда "взять первое попавшиеся" и побежать поставить в церковь свечку, что бы на проде не получилась ошибка "первое попавшиеся не попало".
IMHO


Лёня, разве ты забыл? "взять первое попавшееся значение" - это же классика одного "корпоративного решения".
...
Рейтинг: 0 / 0
17 сообщений из 17, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / HELP! Сортировка по двум полям
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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