выбор записей из таблицы улья, где есть дубликаты с заданными критериями - PullRequest
0 голосов
/ 13 января 2019

enter image description here

Таблица 1 содержит повторяющиеся записи в столбце A с одинаковыми значениями частоты. Мне нужно выбрать одну случайную запись из них. Если дублирующая запись содержит «unknown», то в качестве значения столбца B (как в записи «d») выберите одну из других строк. Мне нужно выбрать заявление, которое удовлетворяет вышеизложенному. Спасибо.

Ответы [ 2 ]

0 голосов
/ 13 января 2019

Использовать row_number аналитическую функцию. Если вы хотите сначала выбрать не unknown запись, то используйте запрос ниже:

select  A, B, Frequency, timekey
from
(select 
       A, B, Frequency, timekey,
       row_number() over(partition by A,Frequency order by case when B='unknown' then 1 else 0 end) rn
)s where rn=1

И если вы хотите выбрать unknown, если они существуют, используйте это row_number в запросе выше:

row_number() over(partition by A,Frequency order by case when B='unknown' then 0 else 1 end) rn
0 голосов
/ 13 января 2019

Этим условиям можно присвоить приоритет, используя выражение case в order by с функцией, подобной row_number.

select A,B,frequency,timekey
from (select t.*
            ,row_number() over(partition by A order by cast((B = 'unknown') as int), B) as rnum
      from tbl t
     ) t 
where rnum = 1

Здесь для каждой группы строк A мы приоритезируем строки, отличные от B = 'unknown', а затем в порядке значений B.

...