Выберите дублирующую строку с одним unique_id и вторым unique_id, отличающимся от ORACLE - PullRequest
0 голосов
/ 02 июня 2019

Предположим, у вас есть эта таблица:

ID  |   DOC |   DOC_ID  |   TYPE
1   |   A   |   B       |   A
2   |   A   |   B       |   B
3   |   BB  |   CC      |   A
4   |   BB  |   DD      |   A
5   |   E   |   F       |   A
6   |   E   |   F       |   B
7   |   E   |   F       |   B
8   |   G   |   H       |   A
9   |   G   |   I       |   A
10  |   G   |   I       |   B
11  |   G   |   H       |   B

Мне нужно отождествить информацию в этой таблице со всеми этими cincuntanses:

  • Поле DOC должно быть таким же
  • Поле DOC_ID должно быть другим
  • иметь более 2 строк в каждом регистре DOC

Как получить информацию, подобную следующей таблице?

ID  |   DOC |   DOC_ID  |   TYPE
3   |   BB  |   CC      |   A
4   |   BB  |   DD      |   A
10  |   G   |   I       |   B
11  |   G   |   H       |   B

Я пытался сделать с Group by, count (doc_id) и не смог получить результат

1 Ответ

1 голос
/ 02 июня 2019

Я думаю, оконные функции.Вот правила, которые вы описываете:

select t.*
from (select t.*,
             row_number() over (partition by doc, doc_id order by doc_id) as seqnum,
             count(*) over (partition by doc) as cnt
      from t
     ) t
where seqnum = 1 and cnt >= 2;

Я думаю, что это те правила, которые вы хотите:

select t.*
from (select t.*,
             row_number() over (partition by doc, doc_id order by doc_id) as seqnum,
             count(distinct doc_id) over (partition by doc) as cnt
      from t
     ) t
where seqnum = 1 and cnt >= 2;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...