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


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

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

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

На выходе достаточно отобразить WaybillNum, filename, vendor и дата по последнему объединенному значению.
...
Рейтинг: 0 / 0
12.03.2018, 13:13
    #39613382
Stax
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
HELP! Сортировка по двум полям
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
12.03.2018, 13:13
    #39613383
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
HELP! Сортировка по двум полям
AntonyCheдата по последнему объединенному значению.RTFM Aggregate Functions (FAQ)
...
Рейтинг: 0 / 0
12.03.2018, 13:21
    #39613392
AntonyChe
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
HELP! Сортировка по двум полям
Stax,

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


А если значения самому не задавать, и их тысяча? Таблица динамична в план наполнения
...
Рейтинг: 0 / 0
12.03.2018, 13:38
    #39613409
Stax
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
HELP! Сортировка по двум полям
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
12.03.2018, 13:46
    #39613424
AntonyChe
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
HELP! Сортировка по двум полям
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
12.03.2018, 14:00
    #39613444
Dshedoo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
HELP! Сортировка по двум полям
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
12.03.2018, 14:04
    #39613449
Dshedoo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
HELP! Сортировка по двум полям
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
12.03.2018, 14:18
    #39613463
Leonid Kudryavtsev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
HELP! Сортировка по двум полям
Мне кажется, у автора задача из разряда "взять первое попавшиеся" и побежать поставить в церковь свечку, что бы на проде не получилась ошибка "первое попавшиеся не попало"

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
12.03.2018, 15:14
    #39613514
Stax
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
HELP! Сортировка по двум полям
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
12.03.2018, 15:20
    #39613520
Dshedoo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
HELP! Сортировка по двум полям
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
12.03.2018, 15:34
    #39613531
Stax
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
HELP! Сортировка по двум полям
Dshedoo,

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

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

....
stax
...
Рейтинг: 0 / 0
12.03.2018, 16:11
    #39613579
AntonyChe
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
HELP! Сортировка по двум полям
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
12.03.2018, 16:30
    #39613608
Stax
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
HELP! Сортировка по двум полям
AntonyChe,

21250068

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


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


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